给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。
示例 1:
输入: 1->2->3->3->4->4->5
输出: 1->2->5
示例 2:
输入: 1->1->1->2->3
输出: 2->3
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
public ListNode deleteDuplicates(ListNode head) {
if (head == null || head.next == null)
return head;
ListNode dummy = new ListNode(0);
dummy.next = head;
ListNode prev = dummy;
ListNode slow = dummy.next;
ListNode fast = dummy.next.next;
while (fast != null){
if (slow.val == fast.val)
fast = fast.next;
else {
if (slow.next != fast){
ListNode fastRecord = fast;
fast = fast.next;
slow = fastRecord;
prev.next = slow;
}else {
fast = fast.next;
slow = slow.next;
prev = prev.next;
}
}
}
if (slow.next != null){
prev.next = null;
}
return dummy.next;
}
上面是别人代码。
基本思想就是利用快慢指针,依次比较,相同快指针就后移,直到不相同;当一开始不相同时,整体向前移动。
基本方法想到了。但是不知道代码该怎么写。
while (fast != null){
if (slow.val == fast.val){
fast = fast.next;
}
else {
fast = fast.next;
slow = slow.next;
prev = prev.next;
}
}
想到了折磨多,也想到了 这个` ListNode fastRecord = fast;
fast = fast.next;
slow = fastRecord;
prev.next = slow;`
就是不知道该怎么放在哪里,哎,垃圾啊!!!