资讯专栏INFORMATION COLUMN

【刷算法】两种类型的删除有序链表中的重复节点

googollee / 1258人阅读

摘要:题目描述删除有序链表中的重复节点,返回头节点删除掉所有重复节点,例如,返回重复的节点中保留一个,例如,返回删除掉所有重复节点细节这里面有几个需要注意的细节新建一个空的头节点,因为这里面牵扯到换新的链表头的问题,所

题目描述

删除有序链表中的重复节点,返回头节点

删除掉所有重复节点,例如1->1->2->2->3->4,返回3->4

重复的节点中保留一个,例如1->1->2->2->3->4,返回1->2->3->4

删除掉所有重复节点
function ListNode(x){
    this.val = x;
    this.next = null;
}
function deleteDuplication(pHead){
    if(pHead === null || pHead.next === null) 
        return pHead;
    var H = new ListNode(null);
    H.next = pHead;

    var pre = H;
    var cur = pHead;

    while(cur !== null && cur.next !== null) {
        if(cur.next.val === cur.val){
            var curRepetitiveVal = cur.val;
            while(cur !== null && cur.val === curRepetitiveVal) {
                cur = cur.next;
            }
            pre.next = cur;
        }else{
            pre = cur;
            cur = cur.next;
        }
    }

    return H.next;
}

细节
这里面有几个需要注意的细节:

新建一个空的头节点,因为这里面牵扯到换新的链表头的问题,所以为了方便新建一个新的节点作为链表的头节点

每个重复节点中保留一个
function ListNode(x){
    this.val = x;
    this.next = null;
}
function deleteDuplication(pHead){
    if(pHead === null || pHead.next === null) 
        return pHead;
    var H = new ListNode(null);
    H.next = pHead;

    var pre = H;
    var cur = pHead;

    while(cur !== null && cur.next !== null) {
        if(cur.next.val === cur.val){
            pre = cur;
            var curRepetitiveVal = cur.val;
            while(cur !== null && cur.val === curRepetitiveVal) {
                cur = cur.next;
            }
            pre.next = cur;
        }else{
            pre = cur;
            cur = cur.next;
        }
    }    

    return H.next;
}

细节

这个和删除掉所有重复节点的区别就是发现有相同的节点时,pre指针立马指向重复的节点中的第一个节点

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/95522.html

相关文章

  • LeetCode题83-简单-删除有序链表重复

    文章目录 ☀️ 前言 ☀️? 作者简介 ?? 一、题目描述 ?? 二、题目解析 ?? 三、代码 ?☁️ 1️⃣. python ☁️❄️ 2️⃣. C# ❄️ ? 结语 ? ☀️ 前言 ☀️ 算法作为极其重要的一点,是大学生毕业找工作的核心竞争力,所以为了不落后与人,开始刷力扣算法题! ? 作者简介 ? 大家好,我是布小禅,一个尽力让无情的代码变得生动有趣的IT小白,很高兴能偶认识你,关注我...

    henry14 评论0 收藏0
  • 算法】LeetCode.237-删除表中节点

    摘要:题目描述请编写一个函数,使其可以删除某个链表中给定的非末尾节点,你将只被给定要求被删除的节点。链表中所有节点的值都是唯一的。给定的节点为非末尾节点并且一定是链表中的一个有效节点。 题目描述 请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。 现有一个链表 -- head = [4,5,1,9],它可以表示为: 4 -> 5 -> 1 -> 9 示...

    zone 评论0 收藏0
  • JavaScript 数据结构与算法之美 - 线性表(数组、栈、队列、链表

    摘要:每个线性表上的数据最多只有前和后两个方向。数组链表队列栈等就是线性表结构。非线性表数据之间并不是简单的前后关系。不包含任何元素的栈称为空栈。移除栈顶的元素,同时返回被移除的元素。 showImg(https://segmentfault.com/img/bVbuvnj?w=900&h=250); 前言 基础知识就像是一座大楼的地基,它决定了我们的技术高度。 我们应该多掌握一些可移值的...

    kaka 评论0 收藏0
  • 数据结构初探,了解不同类型数据结构

    摘要:数据结构数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。不同类型的数据结构编程世界中存在许多不同类型的数据结构。可以将集合数据结构进行排序,并将其称为有序集合。 数据结构基本概念 数据元素(Data Element) 数据元素是数据的基本单位,在计算机程序中通常将其作为一个整体进行考虑和处理。一个数据元素可由若干个数据项组成。 数据项 (Data Item) 数据项是数据结...

    chengtao1633 评论0 收藏0
  • Leetcode:完31道链表一点总结

    摘要:既然说到地址空间了就顺带说一下上面环形链表这道题的另一种很的解法吧。介绍完常规操作链表的一些基本知识点后,现在回到快慢指针。   前几天第一次在 Segmentfault 发文—JavaScript:十大排序的算法思路和代码实现,发现大家似乎挺喜欢算法的,所以今天再分享一篇前两个星期写的 Leetcode 刷题总结,希望对大家能有所帮助。   本文首发于我的blog 前言   今天终于...

    DevTalking 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<