sundeepblue
2/19/2014 - 8:38 PM

remove duplicates in linked list. 1-2-3-3-4 ==> 1-2-4

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