标签:
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)
标签:
原文地址:http://www.cnblogs.com/7070roro/p/4658128.html