删除链表的节点2

在一个排序的链表中,如何删除重复的节点?例如,1,2,3,3,3,4,4,4,5。删除重复的节点后,得到1,2,5

链表节点与函数的定义如下:

struct ListNode

{
    int         value;
    ListNode*   next;
};

void deleteDuplicationNode(ListNode* head);

思路:

思路很直白,遍历节点,找到每一个相同的节点,然后删掉。

代码:

void deleteDuplicationNode(ListNode* head) {
        if (head == nullptr) {
            return;
        }
        ListNode* dummyNode = new ListNode();
        dummyNode->next = head;
        ListNode* tmp = dummyNode;
        while (tmp->next) {
            if (tmp->next == tmp->next->next) {
                int same = tmp->next->value;
                ListNode* tmptmp = tmp->next;
                while (tmptmp && tmptmp->value == same) {
                    ListNode* tpp = tmptmp;
                    tmptmp = tmptmp->next;
                    delete tpp;
                    tpp = nullptr;
                }
                tmp->next = tmptmp;
            }
            tmp = tmp->next;
        }
}