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.mzph.cn/news/893065.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在21世纪的我用C语言探寻世界本质——字符函数和字符串函数(2)

人无完人,持之以恒,方能见真我!!! 共同进步!! 文章目录 一、strncpy函数的使用二、strncat函数的使用三、strncmp函数的使用四、strstr的使用和模拟实现五、strtok函数的使用六、strerror和pe…

stack_queue的底层,模拟实现,deque和priority_queue详解

文章目录 适配器Stack的模拟实现Queue的模拟实现vector和list的对比dequedeque的框架deque的底层 priority_queuepriority_queue的使用priority_queue的底层仿函数的使用仿函数的作用priority_queue模拟实现 适配器 适配器是一种模式,这种模式将类的接口转化为用户希…

LLM - 大模型 ScallingLaws 的 CLM 和 MLM 中不同系数(PLM) 教程(2)

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/145188660 免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。 Scalin…

杰盛微 IRS2336STRPBF 700V带使能和故障报告的三相反逻辑驱动芯片 SOP28封装

IRS2336STRPBF 700V带使能和故障报告的三相反逻辑驱动芯片 IRS2336是 N型高压、高速功率 MOSFET/IGBT高低侧三相栅极驱动芯片,包含三路独立的半桥驱动电路。内部集成了欠压保护和过流保护功能,出现异常时立即关断六通道输出。提供外部使能控制可同时关断…

深入理解第三范式(3NF):数据库设计中的重要性与实践

title: 深入理解第三范式(3NF):数据库设计中的重要性与实践 date: 2025/1/17 updated: 2025/1/17 author: cmdragon excerpt: 在数据库设计中,规范化是确保数据完整性、减少冗余和提高查询效率的关键过程。第三范式(3NF)作为关系数据库设计的高级规范,建立在前两范式…

mongoose 支持https踩坑纪实

简述 mongoose是C编写的嵌入式web服务,它能够支持https协议,可以简单的部署,但要做到完美部署,不是那么容易。 部署方法 本人使用的是最新的7.16版,以前版本似乎是要通过修改 头文件中的 MG_ENABLE_SSL 宏定义&…

RK3576 Android14 状态栏和导航栏增加显示控制功能

问题背景: 因为RK3576 Android14用户需要手动控制状态栏和导航栏显示隐藏控制,包括对锁屏后下拉状态栏的屏蔽,在设置功能里增加此功能的控制,故参考一些博客完成此功能,以下是具体代码路径的修改内容。 解决方案&…

C#高级:通过 Assembly 类加载 DLL 和直接引用DLL的方法大全

一、主项目不添加引用 (主项目不添加引用,而是通过路径获取指定dll) 1.打印类的属性名称 namespace ReflectionDemo {class Program{static void Main(string[] args){// 指定【编译输出】的项目类库dll(启动项目编译输出目录下…

【k8s面试题2025】1、练气期

主要通过呼吸吐纳等方法,将外界的天地灵气吸入体内,初步改造身体,使身体素质远超常人。 文章目录 docker 和虚拟机的不同Kubernetes 和 docker 的关系Kube-proxy IPVS 和 iptables 的异同蓝绿发布Kubernetes中常见的数据持久化方式关于 Docke…

音视频入门基础:RTP专题(4)——FFmpeg源码中,判断某文件是否为SDP文件的实现

一、引言 执行《音视频入门基础:RTP专题(2)——使用FFmpeg命令生成RTP流》中的“媒体文件转推RTP的FFmpeg命令”会生成一个SDP文件,该文件内容如下: v0 o- 0 0 IN IP4 127.0.0.1 sNo Name t0 0 atool:libavformat 61…

【大数据2025】Hadoop 万字讲解

文章目录 一、大数据通识大数据诞生背景与基本概念大数据技术定义与特征大数据生态架构概述数据存储数据计算与易用性框架分布式协调服务和任务调度组件数仓架构流处理架构 二、HDFSHDFS 原理总结一、系统架构二、存储机制三、数据写入流程四、心跳机制与集群管理 安全模式&…

电脑换固态硬盘

参考: https://baijiahao.baidu.com/s?id1724377623311611247 一、根据尺寸和缺口可以分为以下几种: 1、M.2 NVME协议的固态 大部分笔记本是22x42MM和22x80MM nvme固态。 在京东直接搜: M.2 2242 M.2 2280 2、msata接口固态 3、NGFF M.…

回顾2024年在CSDN的成长

文章目录 我与CSDN的初次邂逅初学阶段的阅读CSDN:编程新手的避风港初学者的福音:细致入微的知识讲解考试复习神器:技术总结的“救命指南”曾经的自己:为何迟迟不迈出写博客的第一步兴趣萌芽:从“读”到“想写”的初体验…

抖音ip属地不准是什么原因?可以改吗

在数字化时代,社交媒体平台如抖音已成为人们日常生活的重要组成部分。随着各大平台对用户隐私和数据安全的日益重视,IP属地的显示功能应运而生。然而,不少抖音用户在使用过程中发现,显示的IP属地与实际位置存在偏差,这…

Win11 安装与配置 Java环境 JDK(以JDK11为例)

0,下载JDK 访问JDK官网:Java Downloads | Oracle 选择对应版本进行下载,目前21和23都是可以直接下载的 但是如果需要下载旧版本,往下拉找到要下载的版本,不过这时候下载就需要登录账号了,注册一个就成 2&…

LabVIEW串口通信调试与数据接收问题

在使用LabVIEW进行串口通信时,常常会遇到无法接收数据的情况。这可能与串口设置、连接、设备响应等多方面因素相关。本文将详细讨论如何使用LabVIEW进行串口通信,并提供常见问题的排查与解决方法,帮助用户更高效地进行数据接收调试。通过调整…

概率扩散去噪模型DDPM

文章目录 摘要abstract高斯噪声扩散模型正向过程逆向过程 论文阅读论文创新点解决的问题 总结参考文献 摘要 本周主要学习了高斯噪声在扩散模型中的应用及相关算法实现。扩散模型受到自然现象的启发,通过在图像中引入高斯噪声,模拟出扩散效果&#xff0…

Python操作Excel——openpyxl使用笔记(3)

3 单元格基本操作 3.1 访问单元格和读写其内容 在前面的例子中,已经简单演示过了向单元格中写入和读取数据。这里进一步提供访问单元格的一些方法。和前面一样,使用工作表的索引方式,可以快速定位一个单元格: import openpyxl w…

2025.1.18机器学习笔记:PINN文献精读

第三十周周报 一、文献阅读题目信息摘要Abstract创新点物理背景网络框架实验实验一:直道稳定流条件实验二:环状网络中的非稳定流条件 结论缺点及展望 二、代码实践总结 一、文献阅读 题目信息 题目:《Enhanced physics-informed neural net…

CSS 的基础知识及应用

前言 CSS(层叠样式表)是网页设计和开发中不可或缺的一部分。它用于描述网页的视觉表现,使页面不仅实现功能,还能提供吸引人的用户体验。本文将介绍 CSS 的基本概念、语法、选择器及其在提升网页美观性方面的重要性。 什么是 CSS&…