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.
For example,
Given 1->2->3->3->4->4->5, return 1->2->5.
Given 1->1->1->2->3, return 2->3.
AC代码:
public class Solution {
public ListNode deleteDuplicates(ListNode head) {
if( head == null || head.next == null )
return head;
ListNode dummyHead = new ListNode(-1);
dummyHead.next = head;
ListNode before = dummyHead;
ListNode curr = head;
ListNode next = curr.next;
int duplicates = 0;
while( next != null ){
if( curr.val == next.val ){
ListNode temp = next.next;
curr.next = temp;
next = temp;
duplicates = 1;
if( next != null )
continue;
}
if( duplicates == 1 || next == null ){
before.next = next;
duplicates = 0;
if( next != null ){
curr = next;
next = curr.next;
}
continue;
}
if( next != null ){
before = before.next;
curr = curr.next;
next = next.next;
}
}
return dummyHead.next;
}
}