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) {}
* };
*/
struct ListNode
{
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
class Solution {
public:
ListNode *deleteDuplicates(ListNode *head) {
if(head == NULL || head->next == NULL) return head;
ListNode *node = new ListNode(-1);
node->next = head;
ListNode *cur = node,*t = head;
while(t != NULL)
{
bool flag = false;
while(t->next != NULL && t->next->val == t->val)
{
flag = true;
t = t->next;
}
if(flag)
{
t = t->next;
continue;
}
cur->next = t;
cur = cur->next;
t = t->next;
}
cur->next = t;
return node->next;
}
};