刷题第3天(简单题):LeetCode203--移除链表元素--虚拟头结点

LeetCode203:给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。

示例 1:

输入:head = [1,2,6,3,4,5,6], val = 6
输出:[1,2,3,4,5]示例 2:输入:head = [], val = 1
输出:[]
示例 3:输入:head = [7,7,7,7], val = 7
输出:[]

思路分析:本题是删除单链表中的特定元素,因为单链表只能指向下一个节点,如果删除的是第2个节点及以后的节点,直接让将删除目标节点的指针域赋给删除目标节点的前一个指针域就可以。那么如果删除的是头结点就需要特殊处理了,将头结点向后移动一位就可以。

        有一种不需要分类处理的方法,就是设置一个虚拟头结点(也叫dummyNode),这样就可以对原链表的所有节点进行统一的方式移除了。不过,最后return头结点的时候,需要return dummyNode->next, 这才是新的头结点。

代码:

# 虚拟头结点法
#定义一个单链表
class ListNode:  # 这个类用来定义单链表def __init__(self, val= 0, next=None): # 构造函数,接受参数 val 和 next,并进行初始化。self.val = val  # 将构造函数中传入的 val 参数赋值给当前节点的 val 属性self.next = next  # 将构造函数中传入的 next 参数赋值给当前节点的 next 属性class Solution:def removeElements(self, head: Optional[ListNode], val: int) -> Optional[ListNode]:# 创建虚拟头结点来简化删除过程dummy_head = ListNode(next=head)  # 创建虚拟头结点,虚拟头结点的val默认就行无所谓,只要next等于head就可以# 遍历列表并删除值为val的节点current = dummy_head  # 将虚拟头结点赋值给当前节点while current.next: # 当前节点的指针域不为空(即不是最后一个节点时)保持循环if current.next.val == val:  # 如果当前节点的下一个节点的值等于val时current.next = current.next.next  # 将当前节点的指针指向下下个节点,即跳过目标节点else:current = current.next  # 否则,继续遍历return dummy_head.next  # 返回虚拟头结点的指针域,即真正的头结点。

总结:

1.本题的关键是建立虚拟头结点的概念,虚拟头结点的指针域应该是原链表的head,它的数值域是多少无所谓,默认为0就行;

2. 在遍历的过程中,首先将虚拟头结点赋值给当前节点,然后遍历链表,如果当前节点的下一个节点的值为目标值时,则调整该节点,否则继续遍历(current=current.next);

3. 返回新链表的头结点时,注意需要返回dummy_head.next, 这才是真正的头结点;

4.写到这里,我们应该可以理解上一篇链表基础理论中:链表适用于经常增删,较少查询的场景,而数组适合经常查询较少增删的场景这句话了吧。因为链表删除只需要改变一个指针域,链表增加需要改变两个指针域;而数组增删需要移动之后的所有元素。

5.此外,注意代码中的那个链表定义类,在leetcode编程环境中,这个类存在与否都可以运行成功,但是写一下有助于我们理解虚拟头结点创建的那行代码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/710223.shtml

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

相关文章

面试数据库篇(mysql)- 07索引创建原则与失效及优化

索引创建原则 1). 针对于数据量较大,且查询比较频繁的表建立索引。 2). 针对于常作为查询条件(where)、排序(order by)、分组(group by)操作的字段建立索引。 3). 尽量选择区分度高的列作为索引,尽量建立唯一索引,区分度越高,使用索引的效率越高。 4). 如果是字符…

flink下载安装部署说明

下载 下载地址 flink-1.16.2下载安装包,flink-1.16.2-bin-scala-2.12.zip资源-CSDN文库 安装 解压目录 启动集群 ./start-cluster.sh 提交作业 ./bin/flink run examples/streaming/WordCount.jar 查看日志 停止集群 ./bin/stop-cluster.sh 开启webui vim c…

数据结构与算法 - 数组与二分查找 + Leetcode典型题

1. 什么是数组 数组是存放在连续内存空间上的相同类型数据的集合。 数组可以方便的通过下标索引的方式获取到下标下对应的数据。 C中二维数组在地址空间上也是连续的。 需注意: 数组的下标从0开始。数组内存空间的地址是连续的。数组的元素是不能删的&#xff0c…

【HDFS】Decommision(退役) EC数据节点剩最后几个块卡住的问题

一、背景 近期操作退役EC集群的节点。在退役的过程中,遇到了一些问题。特此总结一下。 本文描述的问题现象是: 每一批次退役10个节点,完全退役成功后开始操作下一批。 但是,中间有一批次有2台节点的Under Replicated Blocks一直是1,不往下降。 处于Decommissioning状态卡…

鸿蒙OpenHarmony多线程能力场景化示例实践

简介 在OpenHarmony应用中,每个 进程 都会有一个主线程,主线程主要承担执行UI绘制操作、管理ArkTS引擎实例的创建和销毁、分发和处理事件、管理Ability生命周期等职责,具体可参见 线程模型概述 。因此,开发应用时应当尽量避免将耗…

Sora技术原理解析

1.Sora简介 Sora是一个基于大规模训练的文本控制视频生成扩散模型。 Sora能够生成高达1分钟的高清视频,涵盖广泛的视觉数据类型和分辨率。 Sora使用简单的文本描述,使得视频创作变得前所未有的简单和高效。 Sora的一些能力: Text-to-video…

windows server mysql 数据库停止 备份 恢复全流程操作方法

一,mysql备份 mysql最好是原工程文件备份.不需要sql查询的方式备份.安全高效. 比如,安装php与mysql组合后,我的mysql文件保存在: D:\phpstudy_pro\Extensions\MySQL5.7.26\data\dux 我只需要复制一份,保存起来就行. 二,mysql恢复 怎么恢复呢.我们一般是只恢复其中一个表,则找…

一个具有强大PDF处理能力的.Net开源项目

PDF具有跨平台、可读性强、不可修改性、无需特定阅读软件、内容安全等好处,在工作中经常都会用到。 所以,我们在项目开发中,经常需要生成PDF的文件,或者把Html、Xml等文件转化为PDF格式。 今天给大家推荐一个具有PDF处理能力的.…

优思学院|质量工程师需要学习什么软件?

初入职质量工程师的朋友常常会问:质量工程师需要学习什么软件?在质量控制和管理的世界里,拥有强大的数据分析工具是走向成功的关键,因此,对于质量工程师来说,掌握正确的软件不仅能提升工作效率,…

lv20 QT对话框3

1 内置对话框 标准对话框样式 内置对话框基类 QColorDialog, QErrorMessage QFileDialog QFontDialog QInputDialog QMessageBox QProgressDialogQDialog Class帮助文档 示例:各按钮激发对话框实现基类提供的各效果 第一步:实现组件布局&…

Pyhton的组合数据类型

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言​📝 生命对某些人来说是美丽的&#xff0c…

尝鲜18倍速大模型Groq和世界第二AI Mistral(Le Chat)

01 尝鲜 中午,一边吃饭,一边尝试一下最新的AI:Groq,它使用了重新设计的LPU,据说比英伟达的GPU快了18倍。 运行了开源的Mixtral-8x7b模型,屏幕上的文字回复几乎是瞬间的,那种速度感,让人心跳加速。 接着,我尝试了来自欧洲的新贵——Mistral AI的Le Chat。 这个三天前…

python学习笔记-内置异常

概述 Python 中的异常(Exception)是指在程序执行过程中遇到的错误或异常情况。当程序出现异常时,解释器会停止当前代码的执行,并试图找到匹配的异常处理器来处理异常。如果没有找到合适的异常处理器,程序就会终止并打…

go并发模式之----阻塞/屏障模式

常见模式之一:阻塞/屏障模式 定义 顾名思义,就是阻塞等待所有goroutine,直到所有goroutine完成,聚合所有结果 使用场景 多个网络请求,聚合结果 大任务拆分成多个子任务,聚合结果 示例 package main ​…

配电房轨道式巡检机器人方案

一、应用背景 在变电站、配电房、开关站等各种室内变配电场所内,由于变配电设备的数量众多、可能存在各类安全隐患,为了保证用电的安全可靠,都要进行日常巡检。 但目前配电房人工巡检方式有以下主要问题: 巡检工作量大、成本高 …

关于StartAI本地部署相关问题解答

很多小伙伴们都有接入自己本地SD的需求,对此小编整理了一些相关问题~ 一、本地部署相关条件 对于想要本地部署的小伙伴要了解,相对于使用StartAI试用引擎本地部署更加考验电脑硬件配置备噢~ 流畅使用要nvidia显卡,6g以上显存(最…

图解知识蒸馏

soft labels与soft predictions越接近越好,通过Loss Fn来实现,产生的数值叫做distillation loss,也叫soft loss。 hard label y与hard prediction越接近越好,通过Loss Fn来实现,产生的数值叫做student loss&#xff0c…

什么是VR虚拟现实元宇宙|VR设备购买|VR设备零售店

VR(Virtual Reality,虚拟现实)元宇宙是指基于虚拟现实技术构建的一个虚拟世界,这个世界可以模拟现实世界或者超出现实世界的一切事物和活动。在这个虚拟世界里,用户可以通过虚拟现实设备(如头戴式显示器、手…

本地搭建xss平台并获取cookie演练

前言 一般而言,搭建xss平台是不被允许的,但是由于教育的目的,搭建xss平台更能让学习者更加直观感受xss漏洞对我们的危害和它的重要性。 搭建xss平台 1.搭建xss平台的基础是在phpstudy一个集成环境上的,所有第一步要安装phpstudy&a…

XSS中级漏洞(靶场)

目录 一、环境 二、正式开始闯关 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x0B 0x0C 0x0D 0x0E ​ 0x0F 0x10 0x11 0x12 一、环境 在线环境(gethub上面的) alert(1) 二、正式开始闯关 0x01 源码: 思路:闭…