leetcode 删除链表重复元素II 中等

 

 

如果值有重复,就一直往下走即可,直至 head -val != head -> next -> val.

用一个变量来表示是否有值出现过,没有出现过才加入答案。

并且   因为是对原链表的链接, 而原链表结点可能有后续结点, 但后续结点是需要删除的. 所以最后要 cur -> next = nullptr

class Solution {
public:
    ListNode* deleteDuplicates(ListNode* head) {
        ListNode *vHead = new ListNode;
        ListNode *cur = vHead;
        while(head) {
            // 下面 while 循环结束时, head 与 与其下一个结点值不相同.
            // 但无法说明 head 当前所在值是否重复过
            bool tag = false;
            while(head -> next && head -> val == head -> next -> val) {
                tag = true;
                head = head -> next;
            }
            if(!tag) {      // 当前值未重复过
                cur -> next = head;
                cur = cur -> next;
            }
            head = head -> next;
        }
        cur -> next = nullptr;          // 因为是对原链表的链接, 而原链表结点可能有后续结点, 但后续结点是需要删除的
        auto ret = vHead -> next;
        delete vHead;
        return ret;
    }
};

 

posted @ 2021-09-20 20:26  rookie_Acmer  阅读(27)  评论(0编辑  收藏  举报