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

题目描述

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

示例:

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

思路

1.这道题的核心思想是跳过值重复的结点。
2.可以设置一个哑结点,防止链表中全部的值都是重复的。
3.可以设置两个值,分别用于标记当前结点是否重复。
4.整体流程就是:

  • 进入循环
  • 保存当前结点
  • 循环跳过重复结点
  • 判断当前结点是否移动过,若移动过,需要跳过

Java代码实现

    public ListNode deleteDuplicates(ListNode head) {
        if(head == null || head.next == null)
            return head;
        ListNode p = new ListNode(-1);
        ListNode res = p;

        //记录当前位置的值
        int cur = 0;
        while(head != null){
            cur = head.val;
            ListNode pre = head;
            //判断是否重复
            while(head.next != null && head.next.val == cur){
                head = head.next;
                //防止 1 2 2 这种返回错误答案
                p.next = null;
            }
            //当前结点是重复值,需要跳过
            if(pre != head){
                head = head.next;
                continue;
            }
            //移动结点
            p.next = head;
            p = p.next;
            head = head.next;
        }

        return res.next;
    }
全部评论

相关推荐

点赞 评论 收藏
分享
头像
昨天 20:19
已编辑
门头沟学院 人工智能
本文略长,献给身处双非、学院本科的低年级依旧陷入迷茫的同学,一个参考。夹杂强烈主观因素,若观点不同,仅当笑料。近日,工作之余的午休时间给母校的学弟学妹进行了宣讲,同时也接受了牛客的访谈,不约而同的触发了两个关键词考研,就业。现象今年和去年,认识的学弟学妹,来自知某、抖某、牛客等系列的学弟学妹,这次宣讲,约有20个学弟学妹来加了我的联系方式,向我取经,聊聊未来,聊聊想法。我这里简单概括一下。1.现在很迷茫,大方向摇摆就业还是考研,但是倾向考研。小方向摇摆竞赛和项目,不知道怎么去做,不知道怎么开始。2.考研的直接目的绝大多数都是为了(混)学历,根本目的就是提高就业竞争力。3.我把他们都拉了个群,在...
牛客85294058...:“私聊能够滔滔不绝,而拉了一个小群之后就完全一声不吭”个人观点这跟从小到大“不要浪费大家时间”的社会环境有关:个人化的提问,如果你上学时有留心、或者参加QA环节多,会注意到这种做法经常是被人骂的。要营造让大家开口的氛围和做出欢迎讨论的议题设置还是比较难的,期待方法探索。
投递大连飞创信息技术有限公司等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务