LeetCode – Remove Duplicates from Sorted List II (Java)

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 public static ListNode deleteDuplicates(ListNode head){
 2          if(head!=null){
 3              ListNode c1 = new ListNode(head.val-1);
 4              c1.next = head;
 5              ListNode re = c1, c2 = head;
 6              int count = 0, temp = c1.next.val;
 7              
 8              while(c2!=null){
 9                  if(temp!=c2.val && count>1){
10                      c1.next = c2;  
11                      temp = c2.val;
12                      count = 1;
13                  }else if(temp!=c2.val && count==1){
14                      c1 = c1.next;
15                      temp = c2.val;
16                      count = 1;
17                  }else 
18                  count ++;
19                  c2 = c2.next;
20                   
21          }
22              if(count > 1) c1.next = null;
23              return re.next;
24          
25      }
26          return null;
27 }

 

 另外还有一个code更简洁的版本出自Programcreek,贴出来给大家参考。 http://www.programcreek.com/2014/06/leetcode-remove-duplicates-from-sorted-list-ii-java/

 1     public static ListNode deleteDuplicates(ListNode head){
 2             ListNode t = new ListNode(0);
 3             t.next = head;
 4             ListNode p = t;
 5             
 6             while(p.next!=null && p.next.next!=null){
 7                 if(p.next.val == p.next.next.val){
 8                     int dup = p.next.val;
 9                     while(p.next!=null && p.next.val==dup){
10                         p.next = p.next.next;
11                     }
12                 }else
13                     p=p.next;
14             }          
15             return t.next;
16      }
17      

 

posted @ 2015-07-19 08:27  7070roro  阅读(184)  评论(0)    收藏  举报