/**
* 单链表节点
*
* @author yinhr
*
*/
public class ListNode {
public int value;
public ListNode next;
public ListNode(int value, ListNode next) {
this.value = value;
this.next = next;
}
}
/**
* 单链表相关操作
*
* @author yinhr
*
*/
public class LinkedListUtil {
/**
* 反转链表(3指针pre head headNext)
*
* @param head
* @return
*/
ListNode reverse(ListNode head) {
ListNode pre = null;
ListNode headNext;
while (head != null) {
headNext = head.next;
head.next = pre;
pre = head;
head = headNext;
}
return pre;
}
/**
* 删除有序链表中重复值,重复值不保留(头结点+三指针pre head end)
*
* @param head
* @return
*/
ListNode deleteRepeat(ListNode head) {
// 创建头节点用于返回链表
ListNode headNode = new ListNode(0, head);
ListNode pre = headNode;
// 用于寻找第一个不同值节点
ListNode end;
while (head != null && head.next != null) {
// 当前值和它的下个值不等则移动两指针
if (head.value != head.next.value) {
pre = head;
head = head.next;
} else {
end = head.next.next;
while (end != null && end.value == head.value) {
end = end.next;
}
pre.next = end;
head = end;
}
}
return headNode.next;
}
/**
* 删除有序链表中重复值,重复值保留一个(1)两指针listHead head,相邻两个相等删除后一个(2)三指针listHead head end
*
* @param head
* @return
*/
ListNode deleteRepeatKeepOne(ListNode head) {
// 用于返回链表
ListNode listHead = head;
// (1)用于寻找第一个不同值节点
ListNode end;
while (head != null && head.next != null) {
// 当前值和它的下个值不等则移动指针
if (head.value != head.next.value) {
head = head.next;
} else {
// (2)也可只用list.next = list.next.next;
end = head.next.next;
while (end != null && end.value == head.value) {
end = end.next;
}
head.next = end;
head = end;
}
}
return listHead;
}
}
版权声明:本文为yyy_hr原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。