82. 删除排序链表中的重复元素 II[注释详细]

707次阅读
没有评论

共计 488 个字符,预计需要花费 2 分钟才能阅读完成。

leetcode: 82. 删除排序链表中的重复元素 II

思路:设置哑结点, 一次扫描 ,遇到没有重复数字的节点就尾插到哑结点之后, 重复就跳过,直到最后一个节点

class Solution {
public:
    ListNode* deleteDuplicates(ListNode* head) {if(head==nullptr || head->next==nullptr)
            return head;
        ListNode *h=new ListNode(-1);
        ListNode *rear=h,*p=head;

        while(p!=nullptr)
        {
            // p 节点为 待判断的起始节点
            ListNode *t=p;  // 保存 p 节点
            p=p->next;      // 后移

            while(p!=nullptr && p->val==t->val) // p 不为空,且值与起始节点相同, 后移
                p=p->next;
            // 此时 p 为 t 的下一个值的起始节点

            if(p==t->next)
            {// p 就是 t 的下一个节点, 说明 t 节点仅一个, 尾插法加入 h 中
                rear->next=t;
                rear=t;
            } 
        }
        rear->next=nullptr;// 截断
        return h->next;
    }
};
正文完
 2
Wenutu
版权声明:本站原创文章,由 Wenutu 于2023-01-13发表,共计488字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)