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

news/2024/7/3 5:48:25

题目描述

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

  1. 删除掉所有重复节点,例如1->1->2->2->3->4,返回3->4
  2. 重复的节点中保留一个,例如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指针立马指向重复的节点中的第一个节点

http://www.niftyadmin.cn/n/2013584.html

相关文章

锋利的 jQuery (第二版) jQuery 中的 动画

4.2 jQuery 中的动画 4.2.1 show() 和 hide()方法 show() 和 hide()方法让元素动起来show("slow"|"normal"|"fast") 长度分别为600ms、400ms、200ms.show(1000) 表示在 1000ms 内展示完毕. 4.2.2 fadeIn() 和 fadeOut()方法 方法作用&#xff1a…

CSS 文本溢出部分显示省略号

单行结尾溢出: 用text-overflow:ellipsis属性实现,当然还需要加宽度width属来兼容部分浏览。width:300px;overflow: hidden; text-overflow:ellipsis; white-space: nowrap; 效果如图: ----------------------------------------------------…

更新队友POM文件后报错

2019独角兽企业重金招聘Python工程师标准>>> 打开报错的地方的pom及其引用方法所在文件的pom,观察其版本号是否一致,不一致进行更改 转载于:https://my.oschina.net/u/3717819/blog/1831838

弄懂char/varchar/nchar/nvarchar

名称长度说明推荐场景char定长速度快,占空间大英文/数字varchar变长不定长,空间小,速度慢英文/数字nchar定长速度快,占空间大汉字nvarchar变长不定长,空间小,速度慢汉字

c++ 实现 http 上传和下载

代码下载地址: http://download.csdn.net/detail/mtour/8243527 最近写了个程序需要用到http通讯&#xff0c;由于flash空间比较小&#xff0c;没有考虑 libcurl库&#xff0c;用c封装了一个http类&#xff0c;实现了http 文件上传和下载 [cpp] view plaincopy #include <…

NodeJS 服务器基本模板

基本server配置 cookie / session / get数据 / post数据 / 请求方法 const expressrequire(express); const staticrequire(express-static); const cookieParserrequire(cookie-parser); const cookieSessionrequire(cookie-session); const bodyParserrequire(body-parser); …

mysql 中的信息数据库以及 shell操作sql

2019独角兽企业重金招聘Python工程师标准>>> Information_schema 是 MySQL 自带的信息数据库&#xff0c;里面的“表”保存着服务器当前的实时信息。它提供了访问数据库元数据的方式。 什么是元数据呢&#xff1f;元数据是关于数据的数据&#xff0c;如数据库名或表…

Makefile初探

选择一个目录创建一个Makefile文件&#xff1b; 注意第二行的开头需要时TAB建空开&#xff0c;不要用空格 执行make make的时候&#xff0c;无论你创建的是makefile还是Makefile都可以识别 &#xff0c;不在乎开头的字母是否大写。 makefile中的第一个重要概念是目标&#xff0…