標籤:
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.
解題思路:
對比I,這道題要求不保留任何重複的節點。所以需要一個index記錄當前已經保留的節點的末端,然後用另一個節點去遍曆,並在這個過程中對重複值和新值進行處理。
痛點在於對corner cases的處理。剛開始刷題不久,還沒有養成預先寫test的習慣,所以在這些特例上,花了很多時間。
Corner Case:[1,2,2],[0,1,2,2,3,4],[1,1],[1],[1,1,2,2]
1 if(head!=null){ 2 ListNode c1 = new ListNode(head.val-1); 3 c1.next = head; 4 ListNode re = c1, c2 = head; 5 int count = 0, temp = c1.next.val; 6 7 while(c2!=null){ 8 if(temp!=c2.val && count>1){ 9 c1.next = c2; 10 temp = c2.val;11 count = 1;12 }else if(temp!=c2.val && count==1){13 c1 = c1.next;14 temp = c2.val;15 count = 1;16 }else 17 count ++;18 c2 = c2.next; 19 }20 if(count > 1) c1.next = null;21 return re.next; 22 }23 return null;
LeetCode – Remove Duplicates from Sorted List II (Java)