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
.
Solution:
1 ListNode *deleteDuplicates(ListNode *head) { 2 if(head == NULL || head->next == NULL) 3 return head; 4 5 //remove the head 6 ListNode * same_node = NULL; 7 while(head != NULL) { 8 if(same_node == NULL) { 9 if(head->next != NULL && head->val == head->next->val){ 10 same_node = head; 11 head = head->next; 12 }else { 13 break; 14 } 15 }else { 16 if(head->val == same_node->val) 17 head = head->next; 18 else 19 same_node = NULL; 20 } 21 } 22 23 if(head == NULL || head->next == NULL) 24 return head; 25 26 ListNode * pre = head; 27 ListNode * same = NULL; 28 ListNode * current = pre->next; 29 while(current != NULL) { 30 if(same == NULL) { 31 if(current->next != NULL && current->val == current->next->val){ 32 same = current; 33 pre->next = current->next; 34 }else{ 35 pre = pre->next; 36 } 37 current = current->next; 38 }else { 39 if(current->val == same->val){ 40 pre->next = current->next; 41 current = current->next; 42 }else { 43 same = NULL; 44 } 45 } 46 } 47 48 return head; 49 }