【LeetCode】203. 移除链表元素
203. 移除链表元素
难度:简单
题目
给你一个链表的头节点 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
输出:[]
提示:
- 列表中的节点数目在范围
[0, 10^4]内 1 <= Node.val <= 500 <= val <= 50
个人题解
思路:
- 先找头节点,即找到第一个不等于val的节点当头节点
- 用当前指针指向当前有效节点,找到下一有效节点再将next指针指向下一有效节点,遍历完即得到结果
/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val = val; }* ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode removeElements(ListNode head, int val) {while (head != null && head.val == val) {head = head.next;}ListNode cur = head;while (cur != null) {while (cur.next != null && cur.next.val == val) {cur.next = cur.next.next;}cur = cur.next;}return head;}
}
复杂度分析
- 时间复杂度:O(n)
- 空间复杂度:O(1)
官方题解
方法一:递归
链表的定义具有递归的性质,因此链表题目常可以用递归的方法求解。这道题要求删除链表中所有节点值等于特定值的节点,可以用递归实现。对于给定的链表,首先对除了头节点 head 以外的节点进行删除操作,然后判断 head 的节点值是否等于给定的 val 。如果 head 的节点值等于 val,则 head 需要被删除,因此删除操作后的头节点为 head.next;
如果 head 的节点值不等于 val,则 head 保留,因此删除操作后的头节点还是 head。上述过程是一个递归的过程。
递归的终止条件是 head 为空,此时直接返回 head。当 head 不为空时,递归地进行删除操作,然后判断 head 的节点值是否等于 val 并决定是否要删除 head。
class Solution {public ListNode removeElements(ListNode head, int val) {if (head == null) {return head;}head.next = removeElements(head.next, val);return head.val == val ? head.next : head;}
}
复杂度分析
- 时间复杂度:O(n)
- 空间复杂度:O(n)
方法二:迭代
也可以用迭代的方法删除链表中所有节点值等于特定值的节点。
用 temp 表示当前节点。如果 temp 的下一个节点不为空且下一个节点的节点值等于给定的 val,则需要删除下一个节点。删除下一个节点可以通过以下做法实现:temp.next=temp.next.next
如果 temp 的下一个节点的节点值不等于给定的 val,则保留下一个节点,将 temp 移动到下一个节点即可。
当 temp 的下一个节点为空时,链表遍历结束,此时所有节点值等于 val 的节点都被删除。
具体实现方面,由于链表的头节点 head 有可能需要被删除,因此创建哑节点 dummyHead,令 dummyHead.next=head,初始化 temp=dummyHead,然后遍历链表进行删除操作。最终返回 dummyHead.next 即为删除操作后的头节点。
class Solution {public ListNode removeElements(ListNode head, int val) {ListNode dummyHead = new ListNode(0);dummyHead.next = head;ListNode temp = dummyHead;while (temp.next != null) {if (temp.next.val == val) {temp.next = temp.next.next;} else {temp = temp.next;}}return dummyHead.next;}
}
-
复杂度分析
- 时间复杂度:O(n)
- 空间复杂度:O(1)
作者:力扣官方题解
链接:https://leetcode.cn/problems/remove-linked-list-elements/solutions/813358/yi-chu-lian-biao-yuan-su-by-leetcode-sol-654m/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
相关文章:
【LeetCode】203. 移除链表元素
203. 移除链表元素 难度:简单 题目 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 示例 1: 输入:head [1,2,6,3,4,5,6], val 6 输出ÿ…...
IDEA2023版本创建Sping项目只能勾选17和21,却无法使用Java8?(已解决)
方案:替换创建项目的源 我们只知道IDEA页面创建Spring项目,其实是访问spring initializr去创建项目。故我们可以通过阿里云国服去间接创建Spring项目。将https://start.spring.io/或者http://start.springboot.io/替换为 https://start.aliyun.com/...
Vue生命周期详解
以下是 Vue 生命周期钩子函数分别做了什么事情的详细说明 详细说明 beforeCreate(创建前):在实例初始化之前调用。此时,实例的数据观测 (data observer)、属性和方法的运算,以及事件配置等内部设置都已完成࿰…...
政务大数据与资源平台建设解决方案:PPT全文75页,附下载
关键词:智慧政务解决方案,大数据解决方案,数据中心解决方案,数据治理解决方案 一、政务大数据与资源平台建设背景 1、政务大数据已成为智慧城市建设的必要基础 为响应国家不断加快5G基建、大数据、人工智能等新型基础设施建设布…...
环境监测传感器守护我们的地球
随着人类活动的不断增加,环境问题日益凸显。为了更好地保护我们的地球,环境监测成为了一项非常重要的任务。而在这个领域,传感器技术发挥着至关重要的作用。今天,我们就来聊聊WX-WQX12 环境监测传感器。 环境监测传感器是一种能够…...
PHP 循环控制 学习资料
PHP 循环控制 在 PHP 中,循环控制语句用于控制循环的执行流程,包括跳出循环、跳过当前迭代等操作。以下是 PHP 中常用的循环控制语句的介绍和示例: break 语句 break 语句用于立即跳出当前循环,并继续执行循环之后的代码。 示…...
Unity 关于生命周期函数的一些认识
Unity 生命周期函数主要有以下一些: Awake(): 在脚本被加载时调用。用于初始化对象的状态和引用。 OnEnable(): 在脚本组件被启用时调用。在脚本组件被激活时执行一次,以及在脚本组件被重新激活时执行。 Reset(): 在脚本组件被重置时调用。用于重置脚本…...
大数据学习(26)-spark核心总结
&&大数据学习&& 🔥系列专栏: 👑哲学语录: 承认自己的无知,乃是开启智慧的大门 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一下博主哦ᾑ…...
EC 404 information economics
EC 404 information economics WeChat: zh6-86...
基于单片机的烟雾检测报警装置(论文+源码)
1.系统设计 (1)利用传感器实现环境中温度、烟雾浓度的实时检测; (2)系统检测的各项数据信息通过液晶模块进行显示,提高设计可视化; (3)系统可以根据实际情况利用按键模…...
C语言面试之旅:掌握基础,探索深度(面试实战之c语言关键词中篇)
劝人的话就像清晨的闹钟,只对别人有用,却永远叫不醒自己。 ----小新 一.预处理指令 (1)#define & typedef #define是C语言中定义的语法,是预处理指令,在预处理时进行简单而机械的字符串替换&…...
项目监控:项目跟踪和控制的工具和步骤
项目管理不仅仅是分配和审查任务,还包括平衡团队成员的工作量、创建预测和避免障碍的工作流程。整个过程涉及许多步骤,因此,项目监控成为了成功业务活动的关键之一,是项目经理确保与团队共同实施的计划顺利进行的方式。 项目监控为…...
GOAT:多模态、终身学习、平台无关的机器人通用导航系统
机器人应用中涉及到的核心技术包括:环境感知与理解、实时定位与建图、路径规划、行为控制等。GOAT通过多模态结合终生学习的方式让你的机器人可以在未知环境中搜索和导航到任何物体。小白也可以零门槛上手。 项目地址:https://theophilegervet.github.i…...
[webpack] webpack 插件大全
clean-webpack-plugin 一个webpack插件,用来删除/清理你的构建文件夹 html-webpack-plugin 该插件将为你生成一个 HTML5 文件, 在 body 中使用 script 标签引入你所有 webpack 生成的 bundle js 文件 zip-webpack-plugin 该插件用来压缩所有文件成一…...
UE4/UE5 雾
雾 UE4/UE5 雾平面雾材质效果图: 3D雾区材质效果图: UE4/UE5 雾 平面雾 做好将材质放在Plane上就行 材质 效果图: 3D雾区 做好将材质放在3D模型上就行 材质 效果图:...
Linux处理文件常见命令
目录 1 cp 2 rm 3 zip与unzip 3.1 zip 3.2 unzip 4 cd 5 ls 6 chmod 7 scp 7.1 文件在你操作的机器上,你要传给另一个机器 7.1.1 文件 7.1.2 文件夹 7.2 文件在另一个机器上,你要把文件搞到你操作的机器上 7.2.1 文件 7.2.…...
sed应用
一.sed 1.Sed概述 sed编辑器是一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。 sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要存储在一个命令文本文件中。 2.sed命令的格…...
Linux配置SFTP用户的详细过程
0. 背景 Linux机器上已有路径/data/tomcat/apache-tomcat-8.5.96/webapps/webroot,需要在该路径之下配置一个目录对外暴露给业务人员使用。业务人员使用sftp协议上传文件。 下面是相关配置: SFTP 用户名:iios SFTP主目录:/data/tomcat/apa…...
前端---JavaScript篇
1. 介绍 JavaScript 是 前端开发人员必须学习的 3 门语言中的一门: HTML 定义了网页的内容CSS 描述了网页的布局JavaScript 控制了网页的行为 接下来开始详解JavaScript。 2.引入方法 js有两种导入方式,一种是内部脚本:直接在html页面中…...
使用vue-admin-template时,需要注意的问题,包括一定要去除mock.js注释
在使用vue-admin-template等前端框架时,如果你没有打算用他们的mock数据,在生产环境下一定要注释mock引用的代码,虽然它没有被调用,但是如果你不注释,就会被打包进去。 找到main.js,看如下代码:…...
【AI原生开发范式革命指南】:20年架构师亲授从Spring Boot到LLM-Ops的5大跃迁路径
第一章:从传统开发到AI原生:软件研发范式革命 2026奇点智能技术大会(https://ml-summit.org) 软件研发正经历一场静默却深刻的范式迁移——从以人类编写确定性逻辑为核心的传统工程模式,转向以提示工程、模型调用与反馈闭环为基座的AI原生架…...
2026年AI软件设计工具全景指南:6款主流产品横向对比
本文适合:产品经理、UI/UX设计师、非技术背景创业者、独立开发者,以及所有希望用AI工具加速软件产品从概念到交付的从业者。"输入一句话,生成一个应用"——这句话在两年前还像科幻,但在2026年,它已经是多款量…...
终极免费文档下载神器:一键获取30+平台完整资料指南
终极免费文档下载神器:一键获取30平台完整资料指南 【免费下载链接】kill-doc 看到经常有小伙伴们需要下载一些免费文档,但是相关网站浏览体验不好各种广告,各种登录验证,需要很多步骤才能下载文档,该脚本就是为了解决…...
GLM-4.7-Flash保姆级教程:CSDN镜像一键启动,30秒开启AI对话
GLM-4.7-Flash保姆级教程:CSDN镜像一键启动,30秒开启AI对话 1. 为什么选择GLM-4.7-Flash? GLM-4.7-Flash是智谱AI推出的新一代开源大语言模型,采用创新的MoE(混合专家)架构,总参数量达30B。相…...
Proteus仿真集成:在虚拟硬件环境中测试Qwen3.5-2B边缘AI算法
Proteus仿真集成:在虚拟硬件环境中测试Qwen3.5-2B边缘AI算法 1. 边缘AI开发的痛点与虚拟仿真价值 在嵌入式AI应用开发中,硬件与算法的协同验证一直是个棘手问题。传统开发流程需要先制作硬件原型,再部署算法进行测试,一旦发现问…...
Clawdbot+Qwen3:32B快速上手:免开发Web界面搭建私有ChatGPT
ClawdbotQwen3:32B快速上手:免开发Web界面搭建私有ChatGPT 1. 为什么选择这个方案? 你是否遇到过这些困扰: 想使用强大的Qwen3:32B大模型,但本地硬件资源不足希望拥有一个美观易用的Web界面,但不想从头开发需要确保…...
Windows下OpenClaw避坑指南:Qwen3.5-9B镜像对接全记录
Windows下OpenClaw避坑指南:Qwen3.5-9B镜像对接全记录 1. 为什么选择WindowsOpenClaw组合 作为一个长期在Windows环境下工作的开发者,我一直在寻找能够提升本地自动化效率的工具。OpenClaw的出现让我眼前一亮——它不像那些需要复杂配置的企业级系统&a…...
如何通过OBS Multi RTMP插件实现多平台同步直播
如何通过OBS Multi RTMP插件实现多平台同步直播 【免费下载链接】obs-multi-rtmp OBS複数サイト同時配信プラグイン 项目地址: https://gitcode.com/gh_mirrors/ob/obs-multi-rtmp 你是否遇到过需要在多个直播平台同时开播,却不得不为每个平台单独配置推流参…...
迎战2026知网最严查重!25届学姐实测10款论文降AI工具(附避坑名单)
毕业季定稿最让人头疼的不是重复率,而是迟迟降不下来的AI疑似度。去年我自己改稿经常改到凌晨,一查还是飘红,这才意识到纯手工降低ai率根本行不通。 为了稳妥达标,我集中研究了市面上常见的论文降ai方法,整理出这份干…...
1分钟快速上手:将你的编程智能体接入Memoria
只需一条命令,即可拥有持久化记忆。兼容Cursor、Claude Code、Codex和Kiro。 为什么你需要它 编程智能体功能强大——但它们会遗忘一切。 长任务被迫中断:一项复杂的重构工作可能跨多个会话进行。智能体崩溃、上下文窗口占满,或者你只是合上…...
