栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

剑指offer. 删除链表中重复的节点-java实现

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

剑指offer. 删除链表中重复的节点-java实现

acwing 29.删除链表中重复的节点 原题链接

在一个排序的链表中,存在重复的节点,请删除该链表中重复的节点,重复的节点不保留。

数据范围
链表中节点 val 值取值范围 [0,100]。
链表长度 [0,100]。

代码案例1:
输入:1->2->3->3->4->4->5
输出:1->2->5
代码案例2:
输入:1->1->1->2->3
输出:2->3

题解

(线性扫描) O(n)O(n)
为了方便处理边界情况,我们定义一个虚拟元素 dummy 指向链表头节点。
然后从前往后扫描整个链表,每次扫描元素相同的一段,如果这段中的元素个数多于1个,则将整段元素直接删除。

class Solution {//弄俩指针
    public ListNode deleteDuplication(ListNode head) {
        ListNode temp = new ListNode(-1);
        temp.next = head ;//虚拟头节点
        ListNode p = temp ; //第一个指针 是无重复链表的末端
        while(p.next != null){
            ListNode q = p.next ; //第二个指针 有重复链表的开头
            while( q != null && p.next.val == q.val) q = q.next;//q指出重复结点的末尾
            if(p.next.next == q) {//如果没有重复链表
                p = p.next ;
            }else {//有重复链表
            p.next = q   ;
            }
        }
        return temp.next;//返回头节点
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/877543.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号