【手绘漫画】图解LeetCode之删除排序链表中的重复元素进阶版(LeetCode 82题)

在这里插入图片描述

图解LeetCode刷题计划

1、写在前面

手绘漫画系列正式上线!!!“图解LeetCode刷题计划” 来了!!!

今天是第十四期,争取每天一期,最多两天一期,欢迎大家监督我。。。
在这里插入图片描述
我就是个鸽子。。。
在这里插入图片描述

2、题目

首先看一下题目,
在这里插入图片描述
和上次的题做一下对比,【手绘漫画】图解LeetCode之删除排序链表中的重复元素(LeetCode 83题)
在这里插入图片描述
嗯,都是删除节点,不过这次要求删除所有的节点,比如 3 重复了,那么所有的 3 都没了~

好了,废话少说,开始了。
在这里插入图片描述
在这里插入图片描述

3、正文

好了,来一起看一下。

双指针,如果 q 指向的元素与 p 的下一个节点的元素相同,q 接着走,如果下一个还相同,那么说明遇到了重复元素。
在这里插入图片描述
如果这段相同的元素,个数多于一个,则整段元素直接删除,否则说明只有一个,没毛病。
在这里插入图片描述

4、代码

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* deleteDuplicates(ListNode* head) {
        auto dummy=new ListNode(-1);
        dummy->next=head;
        auto p=dummy;
        while(p->next){
            auto q=p->next;
            while(q&&q->val==p->next->val){
                q=q->next;
            }
            if(p->next->next==q) p=p->next;
            else p->next=q;
        }
        return dummy->next;
    }
};

在这里插入图片描述
在这里插入图片描述

如果有幸帮到你,请帮我点个【赞】,给个【关注】!如果能顺带【评论】给个鼓励,我将不胜感激。

如果想要更多的资源,欢迎关注 @我是管小亮,文字强迫症MAX~

原文地址:https://www.cnblogs.com/hzcya1995/p/13302562.html