- 图解
class Solution { //java
public ListNode deleteDuplicates(ListNode head) {
ListNode dummy = new ListNode(0, head);
ListNode pre = dummy;
while (head != null && head.next != null) {
if (head.val == head.next.val) {
while (head.next != null && head.val == head.next.val) {
head = head.next; //head移到一段中最后一个重复元素
}
pre.next = head.next;
} else {
pre = head; //pre始终 在head左边
}
head = head.next;
}
return dummy.next;
}
}
- 图解:太神了,此题的算法!
- 对比 eetcode 83题,利用外层while(),实现
cur.next = cur.next.next;
因为cur
指针指向 while 的起始重复点。
class Solution { // java 太神了
public ListNode deleteDuplicates(ListNode head) {
ListNode dummy = new ListNode(0, head);
ListNode cur = dummy;
while (cur.next != null && cur.next.next != null) {
if (cur.next.val == cur.next.next.val) {
int x = cur.next.val;
while (cur.next != null && cur.next.val == x) {
cur.next =cur.next.next;
}
} else {
cur = cur.next;
}
}
return dummy.next;
}
}