当前位置: 首页 > news >正文

leetcode203-移除链表元素

leetcode203
在这里插入图片描述

什么是链表

之前不懂链表的数据结构,一看到链表的题目就看不明白
链表是通过next指针来将每个节点连接起来的,题目中给的链表是单向链表,有两个值,一个val表示值,一个next:表示连接的下一个节点
对于题目中给出的head = [1,2,6,3,4,5,6],实际的结构是这样的:

const node6 = { val: 6, next: null }
const node5 = { val: 5, next: node6 }
const node4 = { val: 4, next: node5 }
const node3 = { val: 3, next: node4 }
const node2 = { val: 6, next: node3 }
const node1 = { val: 2, next: node2 }
const nodeList = { val: 1, next: node1 }

nodeList是头节点,然后通过next连接下一个节点,一直到next:null。
单向链表都只能向下查询,如果是双向链表的话会多一个prev属性,指向前一个节点

方法1

题目中的意思是,如果找到一个节点的val == target,那么就要删除这个节点。
关于删除节点,如果需要删除的节点在头节点,我们需要把头节点往下移动,通过改变头节点的方式来删除。
例如:head = [1,1,2,3],val = 1
那么我们让head = head.next来修改head的头节点,就可以删除头节点。
如果需要删除掉节点在中间,像下面图片中一样,原本cur.next -> 6,我们需要跳过这一项,那么就让cur.next = cur.next.next,就跳过了中间项,这样的话新的节点就是1->2->3
在这里插入图片描述

var removeElements = function (head, val) {if(!head){return head;}// 头节点是目标删除节点while(head && head.val === val){head = head.next;}let cur = head;while(cur){while(cur.next && cur.next.val === val){cur.next = cur.next.next;}cur = cur.next;}return head;
}

方法2

前面方法1中针对头节点和非头节点的删除方式其实是不同的,那么有没有什么方式可以让头节点和非头节点都用相同的方式来进行删除呢?
我们可以考虑创建一个**虚拟头节点dummy**,让dummy.next = head 这样的话,需要删除掉所有节点都是属于中间节点,都以删除中间节点的方式来进行删除操作即可
需要注意的是,最终返回的是dummy.next,因为dummy是我们创建出来的虚拟节点,实际是不存在的,真正的头节点是dummy.next

var removeElements = function (head, val) {if (!head) {return head;}let dummy = { val: 0, next: head };let cur = dummy;while (cur) {while (cur.next && cur.next.val === val) {cur.next = cur.next.next;}cur = cur.next;}return dummy.next;
}
http://www.lryc.cn/news/522913.html

相关文章:

  • Rust 中构建 RESTful API
  • Sqlmap入门
  • 迈向 “全能管家” 之路:机器人距离终极蜕变还需几步?
  • 移动端 REM 适配
  • 逐笔成交逐笔委托Level2高频数据下载和分析:20241230
  • C#实现字符串反转的4种方法
  • UDP 单播、多播、广播:原理、实践
  • 深入浅出:Go语言中的bytes包与字节串操作详解
  • 数据库存储上下标符号,sqlserver 2008r2,dm8
  • LabVIEW串口通信调试与数据接收问题
  • oneplus3t-lineage-14编译-android7
  • 存储过程(SQL)
  • 【I/O编程】UNIX文件基础
  • 完美解决phpstudy安装后mysql无法启动
  • 自己造轮子-基于Ceres的GNSS-INS松耦合组合导航算法
  • 「实战应用」如何为DHTMLX JavaScript 甘特图添加进度线
  • MySQL面试题2025 每日20道
  • HTML学习笔记(4)
  • 解决 MySQL 服务无法启动:failed to restart mysql.service unit not found
  • 在 Ubuntu 上安装 Nginx 的详细指南
  • 58,【8】BUUCTF [PwnThyBytes 2019]Baby_SQL1
  • 2.1 三个世界”与“图灵测试”:人工智能与人类智能的深度探索
  • 基于微信小程序的优购电商系统设计与实现(LW+源码+讲解)
  • JS宏进阶: 工厂函数与构造函数
  • 【Linux】线程全解:概念、操作、互斥与同步机制、线程池实现
  • 关于ubuntu命令行连接github失败解决办法
  • # [游戏开发] [Unity游戏开发]3D滚球游戏设计与实现教程
  • 强推未发表!3D图!Transformer-LSTM+NSGAII工艺参数优化、工程设计优化!
  • Flutter中的事件冒泡处理
  • 昇腾环境ppstreuct部署问题记录