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){ 13 return head; 14 } 15 16 ListNode* newHead = new ListNode(-1); 17 newHead->next = head; 18 19 ListNode* prev = newHead; 20 ListNode* p = head; 21 22 while(p && p->next){ 23 24 if(p->val != p->next->val){ 25 prev = p; 26 p = p->next; 27 }else{ 28 int val = p->val; 29 ListNode* n = p->next->next; 30 while(n){ 31 if(n->val != val){ 32 break; 33 } 34 n = n->next; 35 } 36 prev->next = n; 37 p = n; 38 } 39 } 40 return newHead->next; 41 } 42 };