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

【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 <= 50
  • 0 <= val <= 50

个人题解

思路:

  1. 先找头节点,即找到第一个不等于val的节点当头节点
  2. 用当前指针指向当前有效节点,找到下一有效节点再将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. 移除链表元素 难度&#xff1a;简单 题目 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,6,3,4,5,6], val 6 输出&#xff…...

IDEA2023版本创建Sping项目只能勾选17和21,却无法使用Java8?(已解决)

方案&#xff1a;替换创建项目的源 我们只知道IDEA页面创建Spring项目&#xff0c;其实是访问spring initializr去创建项目。故我们可以通过阿里云国服去间接创建Spring项目。将https://start.spring.io/或者http://start.springboot.io/替换为 https://start.aliyun.com/...

Vue生命周期详解

以下是 Vue 生命周期钩子函数分别做了什么事情的详细说明 详细说明 beforeCreate&#xff08;创建前&#xff09;&#xff1a;在实例初始化之前调用。此时&#xff0c;实例的数据观测 (data observer)、属性和方法的运算&#xff0c;以及事件配置等内部设置都已完成&#xff0…...

政务大数据与资源平台建设解决方案:PPT全文75页,附下载

关键词&#xff1a;智慧政务解决方案&#xff0c;大数据解决方案&#xff0c;数据中心解决方案&#xff0c;数据治理解决方案 一、政务大数据与资源平台建设背景 1、政务大数据已成为智慧城市建设的必要基础 为响应国家不断加快5G基建、大数据、人工智能等新型基础设施建设布…...

环境监测传感器守护我们的地球

随着人类活动的不断增加&#xff0c;环境问题日益凸显。为了更好地保护我们的地球&#xff0c;环境监测成为了一项非常重要的任务。而在这个领域&#xff0c;传感器技术发挥着至关重要的作用。今天&#xff0c;我们就来聊聊WX-WQX12 环境监测传感器。 环境监测传感器是一种能够…...

PHP 循环控制 学习资料

PHP 循环控制 在 PHP 中&#xff0c;循环控制语句用于控制循环的执行流程&#xff0c;包括跳出循环、跳过当前迭代等操作。以下是 PHP 中常用的循环控制语句的介绍和示例&#xff1a; break 语句 break 语句用于立即跳出当前循环&#xff0c;并继续执行循环之后的代码。 示…...

Unity 关于生命周期函数的一些认识

Unity 生命周期函数主要有以下一些&#xff1a; Awake(): 在脚本被加载时调用。用于初始化对象的状态和引用。 OnEnable(): 在脚本组件被启用时调用。在脚本组件被激活时执行一次&#xff0c;以及在脚本组件被重新激活时执行。 Reset(): 在脚本组件被重置时调用。用于重置脚本…...

大数据学习(26)-spark核心总结

&&大数据学习&& &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 承认自己的无知&#xff0c;乃是开启智慧的大门 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一下博主哦&#x1f91…...

EC 404 information economics

EC 404 information economics WeChat: zh6-86...

基于单片机的烟雾检测报警装置(论文+源码)

1.系统设计 &#xff08;1&#xff09;利用传感器实现环境中温度、烟雾浓度的实时检测&#xff1b; &#xff08;2&#xff09;系统检测的各项数据信息通过液晶模块进行显示&#xff0c;提高设计可视化&#xff1b; &#xff08;3&#xff09;系统可以根据实际情况利用按键模…...

C语言面试之旅:掌握基础,探索深度(面试实战之c语言关键词中篇)

劝人的话就像清晨的闹钟&#xff0c;只对别人有用&#xff0c;却永远叫不醒自己。 ----小新 一.预处理指令 &#xff08;1&#xff09;#define & typedef #define是C语言中定义的语法&#xff0c;是预处理指令&#xff0c;在预处理时进行简单而机械的字符串替换&…...

项目监控:项目跟踪和控制的工具和步骤

项目管理不仅仅是分配和审查任务&#xff0c;还包括平衡团队成员的工作量、创建预测和避免障碍的工作流程。整个过程涉及许多步骤&#xff0c;因此&#xff0c;项目监控成为了成功业务活动的关键之一&#xff0c;是项目经理确保与团队共同实施的计划顺利进行的方式。 项目监控为…...

GOAT:多模态、终身学习、平台无关的机器人通用导航系统

机器人应用中涉及到的核心技术包括&#xff1a;环境感知与理解、实时定位与建图、路径规划、行为控制等。GOAT通过多模态结合终生学习的方式让你的机器人可以在未知环境中搜索和导航到任何物体。小白也可以零门槛上手。 项目地址&#xff1a;https://theophilegervet.github.i…...

[webpack] webpack 插件大全

clean-webpack-plugin 一个webpack插件&#xff0c;用来删除/清理你的构建文件夹 html-webpack-plugin 该插件将为你生成一个 HTML5 文件&#xff0c; 在 body 中使用 script 标签引入你所有 webpack 生成的 bundle js 文件 zip-webpack-plugin 该插件用来压缩所有文件成一…...

UE4/UE5 雾

雾 UE4/UE5 雾平面雾材质效果图&#xff1a; 3D雾区材质效果图&#xff1a; UE4/UE5 雾 平面雾 做好将材质放在Plane上就行 材质 效果图&#xff1a; 3D雾区 做好将材质放在3D模型上就行 材质 效果图&#xff1a;...

Linux处理文件常见命令

目录 1 cp 2 rm 3 zip与unzip 3.1 zip 3.2 unzip 4 cd 5 ls 6 chmod 7 scp 7.1 文件在你操作的机器上&#xff0c;你要传给另一个机器 7.1.1 文件 7.1.2 文件夹 7.2 文件在另一个机器上&#xff0c;你要把文件搞到你操作的机器上 7.2.1 文件 7.2.…...

sed应用

一.sed 1.Sed概述 sed编辑器是一种流编辑器&#xff0c;流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。 sed编辑器可以根据命令来处理数据流中的数据&#xff0c;这些命令要么从命令行中输入&#xff0c;要存储在一个命令文本文件中。 2.sed命令的格…...

Linux配置SFTP用户的详细过程

0. 背景 Linux机器上已有路径/data/tomcat/apache-tomcat-8.5.96/webapps/webroot,需要在该路径之下配置一个目录对外暴露给业务人员使用。业务人员使用sftp协议上传文件。 下面是相关配置&#xff1a; SFTP 用户名&#xff1a;iios SFTP主目录&#xff1a;/data/tomcat/apa…...

前端---JavaScript篇

1. 介绍 JavaScript 是 前端开发人员必须学习的 3 门语言中的一门&#xff1a; HTML 定义了网页的内容CSS 描述了网页的布局JavaScript 控制了网页的行为 接下来开始详解JavaScript。 2.引入方法 js有两种导入方式&#xff0c;一种是内部脚本&#xff1a;直接在html页面中…...

使用vue-admin-template时,需要注意的问题,包括一定要去除mock.js注释

在使用vue-admin-template等前端框架时&#xff0c;如果你没有打算用他们的mock数据&#xff0c;在生产环境下一定要注释mock引用的代码&#xff0c;虽然它没有被调用&#xff0c;但是如果你不注释&#xff0c;就会被打包进去。 找到main.js&#xff0c;看如下代码&#xff1a…...

【Shell专项】数组与函数的使用

第四章 数组和函数4.1 数组 4.1.1 简介 变量&#xff1a;用一个固定的字符串&#xff0c;代替一个不固定字符串。数组&#xff1a;用一个固定的字符串&#xff0c;代替多个不固定字符串。 4.1.2 类型 普通数组&#xff1a;只能使用整数作为数组索引关联数组&#xff1a;可以使用…...

如何轻松提升开发效率:智能编程助手的实战体验

如何轻松提升开发效率&#xff1a;智能编程助手的实战体验 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reached your trial requ…...

智能解锁付费内容:信息获取革命的完整解决方案

智能解锁付费内容&#xff1a;信息获取革命的完整解决方案 在当今数字化信息时代&#xff0c;你是否也曾面临优质内容被付费墙阻挡的困扰&#xff1f;智能解锁付费内容技术作为信息获取领域的重要突破&#xff0c;正在重新定义我们的阅读体验。通过创新的技术架构&#xff0c;这…...

Deep Sort PyTorch:多目标跟踪的完整实践指南

Deep Sort PyTorch&#xff1a;多目标跟踪的完整实践指南 【免费下载链接】deep_sort_pytorch MOT using deepsort and yolov3 with pytorch 项目地址: https://gitcode.com/gh_mirrors/de/deep_sort_pytorch 想要在视频中实现准确的行人和车辆跟踪吗&#xff1f;Deep …...

从零构建PINN:基于PyTorch的Burgers方程求解实战

1. 初识PINN与Burgers方程 物理信息神经网络&#xff08;PINN&#xff09;这两年越来越火&#xff0c;它巧妙地将物理定律直接嵌入到神经网络训练过程中。我第一次接触这个概念时&#xff0c;感觉就像发现了新大陆——原来神经网络不仅能处理数据&#xff0c;还能直接求解偏微…...

Vivado IBERT实战:从眼图扫描到误码率分析的链路质量评估

1. 认识IBERT&#xff1a;高速串行链路的"体检医生" 第一次接触IBERT时&#xff0c;我正被一个诡异的高速数据传输问题困扰——在实验室测试时链路表现完美&#xff0c;但一到现场部署就频繁出现数据丢包。当时一位资深工程师递给我一根光纤线说&#xff1a;"用…...

LaTeX2Word-Equation:3分钟搞定数学公式迁移的终极指南 [特殊字符]

LaTeX2Word-Equation&#xff1a;3分钟搞定数学公式迁移的终极指南 &#x1f680; 【免费下载链接】LaTeX2Word-Equation Copy LaTeX Equations as Word Equations, a Chrome Extension 项目地址: https://gitcode.com/gh_mirrors/la/LaTeX2Word-Equation 还在为论文写作…...

Hunyuan-MT-7B开源镜像实战:Pixel Language Portal在中小企业多语客服系统中的落地应用

Hunyuan-MT-7B开源镜像实战&#xff1a;Pixel Language Portal在中小企业多语客服系统中的落地应用 1. 项目背景与价值 在全球化商业环境中&#xff0c;中小企业面临多语言沟通的严峻挑战。传统翻译工具往往存在以下痛点&#xff1a; 翻译质量不稳定&#xff0c;专业术语处理…...

VSCode下载与配置Starry Night Art Gallery开发环境

VSCode下载与配置Starry Night Art Gallery开发环境 如果你对“Starry Night Art Gallery”这个项目感兴趣&#xff0c;想动手参与开发或者自己搭建一个类似的数字艺术画廊&#xff0c;那么第一步就是准备好趁手的开发工具。Visual Studio Code&#xff08;简称VSCode&#xf…...

OpenClaw+Phi-3-vision-128k-instruct:自动化产品说明书生成

OpenClawPhi-3-vision-128k-instruct&#xff1a;自动化产品说明书生成 1. 为什么需要自动化文档生成 作为一名技术文档工程师&#xff0c;我每天都要面对大量产品说明书的编写工作。传统流程需要手动收集产品图片、整理参数表格、撰写使用说明&#xff0c;整个过程耗时费力。…...