LeetCode[Linked List]: Remove Duplicates from Sorted List II

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
.

非经常规的解法。为去除头节点的特殊性,须要用到虚拟头结点技术。

    ListNode *deleteDuplicates(ListNode *head) {        if (!head) return NULL;        ListNode *dummyHead = new ListNode(0);        dummyHead->next = head;        ListNode *prev = dummyHead, *curr = head->next;        int curVal = head->val;        while (curr) {            if (curr->val == curVal) {                for (curr = curr->next; curr != NULL && curr->val == curVal; curr = curr->next) ;                prev->next = curr;                if (curr) {                    curVal = curr->val;                    curr = curr->next;                }            }            else {                prev = prev->next;                curVal = curr->val;                curr = curr->next;            }        }        return dummyHead->next;    }