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
.
1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListNode *next; 6 * ListNode(int x) : val(x), next(NULL) {} 7 * }; 8 */ 9 class Solution { 10 public: 11 ListNode *deleteDuplicates(ListNode *head) { 12 if (head == NULL || head->next == NULL) return head; 13 14 for (ListNode **prev = &head; (*prev) != NULL;) { 15 int count = 0; 16 ListNode *pter = *prev; 17 while (pter != NULL && (pter->val) == (*prev)->val) { 18 pter = pter->next; 19 ++count; 20 } 21 if (count == 1) { 22 prev = &((*prev)->next); 23 } else { 24 while ((*prev) != pter) { 25 ListNode *entry = *prev; 26 *prev = entry->next; 27 delete entry; 28 } 29 } 30 } 31 32 return head; 33 } 34 };