给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。

思路

  1. 引入一个 dummyHead 方便链表头需要被删除的场景
  2. 遍历时需要保留前驱节点以便处理当前节点被删除的情况
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var deleteDuplicates = function (head) {
const dummyHead = new ListNode()
dummyHead.next = head
let prev = dummyHead
let cur = dummyHead.next
while (cur) {
while (cur.next && cur.next.val === cur.val) {
cur = cur.next
}
if (prev.next !== cur) {
// 有重复的情况,此前此前已删除了部分节点
prev.next = cur.next
} else {
prev = cur
}
cur = cur.next
}
return dummyHead.next
}