remove duplicates in linked list. 1-2-3-3-4 ==> 1-2-4
ListNode* removeDuplicates(ListNode *head) {
if(!head) return NULL;
if(!head->next) return head;
ListNode dummy(-1);
dummy.next = head;
ListNode *pre = &dummy, *cur = head;
while(cur && cur->next) {
bool can_delete = false;
ListNode *nxt = cur->next;
while(nxt && cur->val == nxt->val) {
can_delete = true;
cur->next = nxt->next;
delete nxt;
nxt = cur->next;
}
if(can_delete) {
pre->next = cur->next;
delete cur;
cur = pre->next;
can_delete = false;
}
else {
pre = cur;
cur = cur->next;
}
}
return dummy.next;
}