NO.82 删除排序链表中的重复元素II 中等
思路一:快慢指针 本题是NO.83删除排序链表中的重复元素的姊妹题,区别在于当出现重复的时候将发生重复的节点全部删除。
慢指针slow指向哑节点,fast指向head并遍历链表。
如果fast节点的值等于fast下一个节点的值则继续遍历。
否则值不相等或者fast已到达结尾的时候有两种情况:
fast和slow不相邻,指针之间存在重复的元素,则删除发生重复的节点,即
slow.next=fast.next
。fast和slow相邻,则移动slow到fast的位置。
循环直至fast遍历链表完毕。
1 | public ListNode deleteDuplicates(ListNode head) { |
时间复杂度:O(n)
本人菜鸟,有错误请告知,感激不尽!
更多题解和源码:github