leetcode -- Remove Duplicates from Sorted List II
Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.
For example,
Given 1->2->3->3->4->4->5
, return 1->2->5
.
Given 1->1->1->2->3
, return 2->3
.
[解题思路]
在头结点之前添加safeguard,防止处理一开始就是连续节点的情况
当发现连续节点时,line 29删除重复节点,line 35-39处理剩余的一个重复节点
需要注意的一个test case:[1,1,2,2],之前line 40-41 是在while语句之后,不能处理这种情况
现在当出现连续节点时,pre,cur指针不移动,继续检查删除后的情况
1 /** 2 * Definition for singly-linked list. 3 * public class ListNode { 4 * int val; 5 * ListNode next; 6 * ListNode(int x) { 7 * val = x; 8 * next = null; 9 * } 10 * } 11 */ 12 public class Solution { 13 public ListNode deleteDuplicates(ListNode head) { 14 // Start typing your Java solution below 15 // DO NOT write main() function 16 if(head == null){ 17 return head; 18 } 19 20 ListNode fake = new ListNode(Integer.MIN_VALUE); 21 fake.next = head; 22 head = fake; 23 24 ListNode pre = head, cur = head.next; 25 while(cur != null){ 26 boolean flag = false; 27 while(cur != null && cur.next != null){ 28 if(cur.val == cur.next.val){ 29 cur.next = cur.next.next; 30 flag = true; 31 } else { 32 break; 33 } 34 } 35 if(flag){ 36 pre.next = cur.next; 37 cur = pre.next; 38 continue; 39 } 40 pre = cur; 41 cur = cur.next; 42 } 43 return head.next; 44 } 45 }