82-Remove-Duplicates-from-Sorted-List-II
Last updated
Was this helpful?
Last updated
Was this helpful?
给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。
测试用例:
示例 1: 输入: 1->2->3->3->4->4->5 输出: 1->2->5
示例 2: 输入: 1->1->1->2->3 输出: 2->3
这道题跟的区别就是当前元素一旦有重复的,我们就需要删掉所有重复,比保留一个要难一点。但是说难也没有多难。就是细节繁琐。
这里我维护了三指针,第一个指针pre
指向可能要删除的节点的前向节点,因为是单链表,要删除一个元素,就要获得它的前向节点。第二个指针cur
指向重复元素序列的第一个位置,第三个指针ptr
用来遍历链表。
这里还有一个小细节需要注意:如果在末尾有大量重复元素,上面这种方法是删不掉的,因为不管最后的元素是否重复,ptr为null时都会结束循环。
所以我们在循环外需要额外判断一次,cur
的下一个节点是否为null,因为如果末尾出现重复,cur的下一个节点一定不为null。
链表题的细节就是烦人啊。