【每日一道算法题】移除链表节点

这里写自定义目录标题

      • 【每日一道算法题】移除链表元素
        • 思路
        • 记录我的代码
        • 力扣官方题解
          • 递归
          • 迭代

【每日一道算法题】移除链表元素

力扣题目链接(opens new window)

给你一个链表的头节点 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 输出:[]

思路

如何实现单链表的删除操作?

我们知道,单链表的每个节点存着两个变量,一个变量val是数据值,一个变量next是下一个节点的地址值。如果想删除链表当中的某个节点,比如下图当中的0x002,就要把0x003赋值给0x001的next。但此时你会发现,0x002依然指向的是0x003,这样不是还存在内存当中吗?是的,但是通过java自己的内存回收机制,会将其占用的内存自动释放。

因此由于单链表的特殊性,链表的节点都是通过它的前一个节点来移除的,即让当前节点的next指针直接指向下下个(后两个)节点,散落的节点(如下图0x002)会通过内存回收机制自动删除。
在这里插入图片描述

记录我的代码

做了一个小时,做不出来,放弃了。

后来下午看了题解,画了十三分钟终于做了出来。第一次做大体思路是正确的,但是一来不清楚当前节点的下下个节点的地址值可以用Node.next.next来表达,二来没有设置虚拟头节点,单独写了一段逻辑来判断头节点的数据值是否等于目标值,做的过程非常混乱。

class Solution {public ListNode removeElements(ListNode head, int val) {//定义一个虚拟头节点dummyheadListNode dummyhead = new ListNode(0);dummyhead.next = head;//移除链表元素,如果下一个节点的值等于目标值,则删除下一个节点,循环条件是下一个节点不为空//定义当前节点curNode为虚拟头节点ListNode curNode = dummyhead;while(curNode.next != null){//下一个节点不为空//如果下一个节点值等于valif(curNode.next.val == val){//删除下一个链表节点curNode.next = curNode.next.next;}else{//这里为什么用else:如果下一个节点要删除,那么当前节点指向的就是下下个节点,符合我们的需求;如果下一个节点不用删除,那么当前节点需要移动到下一个节点才能判断下下个节点的数据是否等于val。//如果下一个节点值不等于val,那么当前节点需要变成下一个节点curNode = curNode.next;        }}//返回头节点return dummyhead.next;}
}
力扣官方题解
递归

在这里插入图片描述

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;}
}
迭代

由于头结点(首元节点)可能需要被删除,所以设置一个虚拟的头节点。

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;}
}

在这里插入图片描述
参考学习资料:代码随想录

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

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

相关文章

3459: 【PY】A+B问题

题目描述 在大部分的在线题库中,都会将AB问题作为第一题,以帮助新手熟悉平台的使用方法。 AB问题的题目描述如下:给定两个整数A和B,输出AB的值。 现在请你解决这一问题。 输入 第一行一个整数,表示A 第二行一个整…

arm的状态寄存器

目录 一、arm 的 PSRs二、CPSR2.1 CPSR_cxsf 三、SPSR四、APSR 一、arm 的 PSRs arm 中有很多程序状态寄存器(Program Status Registers,PSRs)用于存储处理器的状态信息,包括 CPSR\SPSR\FPSR\APSR 等: CPSR&#xff…

Vue3配置router路由步骤

Vue3配置router路由步骤 首先创建一个vue3的项目 先检查一下router的版本,可以在pakage.json里面查看,也可以你直接在终端输入 npm list vue-router如果版本比较低的话,先升级一下 vue3的话,用以下命令 npm install vue-route…

红蓝色WordPress外贸建站模板

红蓝色WordPress外贸建站模板 https://www.mymoban.com/wordpress/5.html

TSINGSEE青犀推出河道/河湖/水域治理视频AI智能解决方案

一、方案背景 “十四五”时期,在面源污染防治等方面实现突破,实现主要水污染排放总量持续减少,水生态环境持续改善等任务艰巨。进一步完善流域综合治理体系,提升流域水环境综合治理能力和水平,更好适应新阶段发展需求…

verilog 从入门到看得懂---verilog 结构说明语句

verilog语言中的过程块都是由一下四个结构语句构成: 1)initial说明语句(只执行一次) 2)always说明语句(敏感参数触发的时候调用) 3)task说明语句(调用的时候执行) 4)…

【Java基础】Java的反射、注解、lambda表达式

文章目录 1. 反射1.1 反射演示1.2 反射原理 2. Class类3. 注解3.1 内置注解3.2 元注解3.3 自定义注解 4. lambda表达式5. lambda精简6. lambda调用方法 1. 反射 1.1 反射演示 有一个猫类,如下: public class Cat {private String name;private int ag…

IDEA2023.1.1中文插件

1.启动IDEA 选中Customize 2.选择All settings 3.选中Plugins,再搜索栏里输入Chinese,找到 "Chinese (Simplified) Language"插件,点击 Install 进行安装。 4. 安装完成后,重启IntelliJ IDEA,即可看到界面语言已经变为中文。

JavaScript 函数定义和调用

在JavaScript中,定义函数的方式如下: function abs(x) { if (x > 0) { return x; } else { return -x; } } 上述abs()函数的定义如下: function指出这是一个函数定义; abs是函数的名称; (x)括号内列出函数的参数&am…

Springboot 集成 dynamic-datasource-spring-boot-starter,实现项目中原有的数据源作为主数据源

Springboot 集成 dynamic-datasource-spring-boot-starter&#xff0c;实现项目中原有的数据源作为主数据源 保证原有项目中在执行数据库操作时&#xff0c;默认使用原有数据源&#xff0c;新数据源做特定操作 引入多数据源切换依赖&#xff1a; <dependency><grou…

JavaScript(一)基础

文章目录 一、JS介绍JavaScript是什么JavaScript书写位置JavaScript的注释输入输出语法字面量 二、变量变量是什么变量基本使用变量的本质变量命名规则与规范变量拓展-数组var与let的区别 三、常量四、数据类型数据类型检测数据类型数据类型转换隐式转换显式转换 简单运算符断点…

【洛谷 P8695】[蓝桥杯 2019 国 AC] 轨道炮 题解(映射+模拟+暴力枚举+桶排序)

[蓝桥杯 2019 国 AC] 轨道炮 题目描述 小明在玩一款战争游戏。地图上一共有 N N N 个敌方单位&#xff0c;可以看作 2D 平面上的点。其中第 i i i 个单位在 0 0 0 时刻的位置是 ( X i , Y i ) (X_i, Y_i) (Xi​,Yi​)&#xff0c;方向是 D i D_i Di​ (上下左右之一, 用…

【详细注释+流程讲解】基于深度学习的文本分类 TextCNN

前言 这篇文章用于记录阿里天池 NLP 入门赛&#xff0c;详细讲解了整个数据处理流程&#xff0c;以及如何从零构建一个模型&#xff0c;适合新手入门。 赛题以新闻数据为赛题数据&#xff0c;数据集报名后可见并可下载。赛题数据为新闻文本&#xff0c;并按照字符级别进行匿名…

同步检查继电器 JT-1/200 100V 面板嵌入式安装,板后接线

系列型号 JT-1同步检查继电器&#xff1b; DT-1同步检查继电器&#xff1b; JT-3同步检查继电器&#xff1b; DT-3同步检查继电器&#xff1b; 一、应用范围 JT(DT)系列同步检查继电器用于两端供电线路的自动重合闸线路中&#xff0c;以检查线路上电压的存在及线路上和变电站汇…

基于Spring Boot的在线考试系统

开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven…

Go语言时间编程

1.时间元素编程 时间是一个重要的编程元素,可用于计算、同步服务器以及测量。Go语言标准库提供了time包,其中包含用于同当前时间交互以及测量时间的函数和方法。 在编程中,时间通常被称为“实时” “过去的时间” 和 “壁挂钟” 。对于术语“壁挂钟”,可将其视为挂在墙上的…

element-ui breadcrumb 组件源码分享

今日简单分享 breadcrumb 组件的源码实现&#xff0c;主要从以下三个方面&#xff1a; 1、breadcrumb 组件页面结构 2、breadcrumb 组件属性 3、breadcrumb 组件 slot 一、breadcrumb 组件页面结构 二、breadcrumb 组件属性 2.1 separator 属性&#xff0c;分隔符&#xff…

程序员沟通之道:TCP与UDP之辩,窥见有效沟通的重要性(day19)

程序员沟通的重要性&#xff1a; 今天被师父骂了一顿&#xff0c;说我不及时回复他&#xff0c;连最起码的有效沟通都做不到怎么当好一个程序员&#xff0c;想想还挺有道理&#xff0c;程序员需要知道用户到底有哪些需求&#xff0c;用户与程序员之间的有效沟通就起到了关键性作…

PCL 计算直线到三角形的距离(3D)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 这里的思路相对就简单很多了,主要有之前的积累: 1、首先,我们可以判断直线与三角形是否相交,相交则距离为0,这里可以参考之前的博客:PCL 计算一条射线与一个三角形的交点。 2、如果直线与三角形未相交,则只需…

Java多态世界(day18)

多态&#xff1a;重写的方法调用和执行 1.静态绑定&#xff1a;编译器在父类中找方法&#xff0c;如&#xff1a; 上面的eat&#xff08;&#xff09;方法是先在父类中找方法&#xff0c;父类没有的话&#xff0c;就算子类有编译也会报错。&#xff08;如果引用方法在父类中存…