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 }
原文地址:https://www.cnblogs.com/feiling/p/3259474.html