LeetCode OJ 82. 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.

相对于Remove Duplicates from Sorted List这个问题,这个问题是要把重复出现过的所有元素全部删除。我的想法是找出每一个数字段的起点和终点,如果这个数据段出现了重复元素,就把这个数据段整体删除。

 1 public class Solution {
 2     public ListNode deleteDuplicates(ListNode head) {
 3         if(head==null || head.next==null) return head;
 4         ListNode thead = new ListNode(-1);
 5         ListNode begin = thead;
 6         ListNode end = head;
 7         thead.next = head;
 8         
 9         int cur = head.val;
10         while(end.next!=null){
11             if(end.next.val==cur){
12                 end = end.next;
13             }
14             else{
15                 if(begin.next==end){
16                     begin = end;
17                     end = end.next;
18                 }
19                 else{
20                     begin.next = end.next;
21                     end = begin.next;
22                 }
23                 cur = end.val;
24             }
25         }
26         if(begin.next==end) return thead.next;
27         begin.next = null;
28         return thead.next;
29     }
30 }

 

 
posted @ 2016-04-18 10:33  Black_Knight  阅读(177)  评论(0编辑  收藏  举报