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