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
.
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *deleteDuplicates(ListNode *head) {
if (!head||!head->next) return head;
ListNode *p, *q;
ListNode *sentry=new ListNode(0);
sentry->next=head;
p = sentry; q = NULL;
while (p->next){
q = p->next;
while(q->next &&q->val == q->next->val){
q = q->next;
}
if(p->next!=q)
p->next=q->next;
else
p=q;
}
return sentry->next;
}
};