首页 > 代码库 > 82. Remove Duplicates from Sorted List II

82. 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.

 

 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 };

 

82. Remove Duplicates from Sorted List II