Skip to main content

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

题目

存在一个按升序排列的链表, 给你这个链表的头节点 head, 请你删除所有重复的元素, 使每个元素只出现一次. 返回同样按升序排列的结果链表.

提示:
  • 链表中节点数目在范围 [0, 300]
  • -100 <= Node.val <= 100
  • 题目数据保证链表已经按升序排列
示例

输入: head = [1, 1, 2, 3, 3]

输出: [1, 2, 3]

题解

因为链表有天然的方法 curr.next = curr.next.next 来删除下个元素, 所以用左边的直观解法就可以, 不过更通用的解法是使用快慢指针.

这个解法可以跟 26. 删除排序数组中的重复项 对比着看, 一个模子, 只不过一个是数组, 一个是链表.

var deleteDuplicates = function (head) {
if (!head) return head

let slow = head,
fast = head

while (fast) {
if (fast.val !== slow.val) {
slow.next = fast
slow = slow.next
}

fast = fast.next
}

// 断开与后面重复元素的连接
slow.next = null

return head
}