跳转至

82.删除排序链表中的重复元素 II (Medium)*

题目描述*

给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。

示例*

输入: 1->2->3->3->4->4->5

输出: 1->2->5

代码*

删除所有含有重复数字的结点,注意不是去重。

肯定是要新建一个头结点,然后双指针。

当找到一个重复的结点时,从这个结点开始遍历,删除所有的重复结点。

class Solution {
public:
    ListNode* deleteDuplicates(ListNode* head) {
        if(head == nullptr || head->next == nullptr) {
            return head;
        } 
        auto newHead = new ListNode(-1);
        newHead->next = head;
        auto pre = newHead;
        auto cur = newHead;
        while(cur != nullptr) {
            pre = cur;
            cur = cur->next;
            while(cur != nullptr && cur->next != nullptr && cur->next->val == cur->val) {
                int curVal = cur->val;
                while(cur != nullptr && cur->val == curVal) {
                    auto del = cur;
                    cur = cur->next;
                    delete del;
                    del = nullptr;
                }
            }
            pre->next = cur;
        }
        return newHead->next;
    }
};

最后更新: July 23, 2022