82.删除排序链表中的重复元素Ⅱ

题目描述

题解

双指针

使用双指针, 左指针指向最左边的重复节点, 右指针指向最右边的重复节点, 然后将其整段删除, 这里要用到哨兵节点和前驱节点.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public ListNode deleteDuplicates(ListNode head) {
if (head == null || head.next == null) {
return head;
}


ListNode dummy = new ListNode(0);
dummy.next = head;
ListNode pre = dummy;
ListNode i = pre.next;
ListNode j = i.next;

while (i != null && j != null) {
if (i.val != j.val) {
i = i.next;
j = j.next;
pre = pre.next;
} else {
while (j.next != null && j.next.val == i.val) {
j = j.next;
}
pre.next = j.next;
i = pre.next;
if (i!=null){
j = i.next;
}
}
}

return dummy.next;
}
-------------本文结束感谢您的阅读-------------
可以请我喝杯奶茶吗