Leetcode 203 题 移除链表元素(标签:链表)

【LeetCode题目详解】 203. 移除链表元素707. 设计链表206. 反转链表 day3(补) 关键是初始化的地方,可能有的同学会不理解, 可以看到双指针法中初始化 cur = head,pre = NULL,在递归法中可以从如下代码看出初始化的逻辑也是一样的,只不过写法变了。使用这种方法移除了一个头结点,是不是发现,在单链表中移除头结点 和 移除其他节点的操作方式是不一样,其实在写代码的时候也会发现,需要单独写一段逻辑来处理移除头结点的情况。为什么要保存一下这个节点呢,因为接下来要改变 cur->next 的指向了,将cur->next 指向pre ,此时已经反转了第一个节点了。 阅读详情
题目描述

删除链表中等于给定值 val 的所有节点。

示例:
输入:1->2->6->3->4->5->6, val = 6
输出:1->2->3->4->5


思路分析

「使用双指针」
为了方便处理,可以利用哑节点记录表头节点。使用双指针 pre 和 cur 分别指向上一个节点和当前节点。
在这里插入图片描述
如果当前节点为需要被删除的目标节点,那么上一个节点的指针就要指向当前节点的下一个节点。
在这里插入图片描述

class Solution {
    public ListNode removeElements(ListNode head, int val) {
        ListNode node = new ListNode(0);
        node.next = head;

        ListNode pre = node;
        ListNode cur = head;
        while (cur != null) {
            if (cur.val == val) {
                cur = cur.next;
                pre.next = cur;
            } else {
                cur = cur.next;
                pre = pre.next;
            }
        }

        return node.next;
    }
}

稍微优化了一下:

class Solution {
    public ListNode removeElements(ListNode head, int val) {
        ListNode node = new ListNode(0);
        node.next = head;

        ListNode pre = node;
        ListNode cur = head;
        while (cur != null) {
            if (cur.val == val) {
                pre.next = cur.next;
            } else {
                pre = cur;
            }
            cur = cur.next;
        }

        return node.next;
    }
}

「进一步简化」
前面使用 pre 和 cur 两个指针,可以进一步简化,只使用一个 cur 指向当前节点,由于只有一个节点,因此必须提前发现需要删除的目标节点。
在这里插入图片描述
如果当前节点的下一个节点为需要被删除的节点,当前节点指向下一个节点的下一个节点。
在这里插入图片描述

class Solution {
    public ListNode removeElements(ListNode head, int val) {
        ListNode node = new ListNode(0);
        node.next = head;

        ListNode cur = node;
        while (cur != null && cur.next != null) {
            if (cur.next.val == val) {
                cur.next = cur.next.next;
            } else {
                cur = cur.next;
            }
        }

        return node.next;
    }
}

技术公众号:小猿君的算法笔记
通关链表基础 链表是一种通过指针串联的线性结构数据域(val):存储实际数据指针域(next):指向下一个节点最后一个节点的next指向nullptr,表示结束。int val;✅建议:面试时手写节点定义,避免默认构造函数未初始化的问题。技巧说明虚拟头结点统一处理头结点操作双指针快慢指针(找环、倒数第K)、左右指针(有序链表)画图辅助指针操作前务必画图内存管理C++ 需手动delete,避免内存泄漏边界条件空链表、单节点、全删除等🌟终极心法链表操作的本质是指针操作,而指针操作的核心是“先保存,再修改”。 阅读详情

相关推荐

LeetCode刷题模版:201 - 210

Hello!ଘ(੭ˊᵕˋ)੭昵称:海轰标签:程序猿|C++选手|学生简介:因C语言结识编程,随后转入计算机专业,获得过国家奖学金,有幸在竞赛中拿过一些国奖、省奖…已保研学习经验:扎实基础 + 多做笔记 + 多敲代码 + 多思考 + 学好英语!唯有努力💪本文仅记录自己感兴趣的内容文章仅作为个人学习笔记记录,记录从0到1的一个过程希望对您有一点点帮助,如有错误欢迎小伙伴指正。

海到无边天作岸 山登绝顶我为峰 1156

刷题之Leetcode203题(超级详细)

这样移除了一个头结点,是不是发现,在单链表中移除头结点 和 移除其他节点的操作方式是不一样,其实在写代码的时候也会发现,需要单独写一段逻辑来处理移除头结点的情况。那么因为单链表的特殊性,只能指向下一个节点,刚刚删除的是链表的中第二个,和第四个节点,那么如果删除的是头结点又该怎么办呢?移除头结点和移除其他节点的操作是不一样的,因为链表的其他节点都是通过前一个节点来移除当前节点,而头结点没有前一个节点。来看一下,如何移除元素1 呢,还是熟悉的方式,然后从内存中删除元素1。依然还是在这个链表中,移除元素1。

qq_69748833的博客 1336

leetcode:203 删除链表中的节点

删除链表中等于给定值 val 的所有节点。 示例: 输入: 1->2->6->3->4->5->6, val = 6 输出: 1->2->3->4->5

LeetCode第203题—移除链表元素

LeetCode第203题

Green_756的博客 624

对西安交大轴承数据集XJTU-SY_Bearing_Datasets进行读取和处理:

故障诊断,对西安交大轴承数据集XJTU-SY_Bearing_Datasets进行读取和处理

qq_44757503的博客 6058

如何评价智能座舱的好坏之指标拆分?

智慧服务实际上是有一些比较实用的功能的,常用的有后视镜自动伸展、离车自动落锁、座椅记忆等,但这部分前装率较高,各家的区分度不高,所以一级指标中占比最低(10%)。不过呢,规则里的权重仅有5%,或许是考虑到比较成熟,没有区分度。全景环视明显拔得头筹,占比85%,这对于我这种没有倒车影像不敢倒车的人,举双手赞成,但还是要看其效果,比如,现在,测评规则的颁布实际上也让我们看到,智能座舱的技术方案正走向成熟,并将走进规范化运作。,占比 60%,这与我们对座舱最直接的认知符合,

shuiqingyan的博客 1082

力扣(LeetCode)第203题 -- 移除链表元素

本文结合伪代码对力扣“203.移除链表元素”进行了详细的讲解。

@Peixian Liang 426

Chkdsk误删文件?5步教你从FOUND.000文件夹找回重要数据(附工具推荐)

本文详细介绍了当Chkdsk误删文件后,如何从FOUND.000文件夹中找回重要数据的5个步骤。包括理解Chkdsk与FOUND.000的关系、定位与访问FOUND.000文件夹、手动恢复CHK文件的技巧、使用UnCHK工具自动化恢复以及预防数据丢失的关键措施。适用于Windows用户解决数据丢失问题,特别是NTFS文件系统下的文件恢复。

weixin_30687051的博客 380

LeetCode 第203题 移除链表元素 C语言实现Java实现

题目描述 给你一个链表的头节点 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 输出:[] 来源:力扣(LeetCode) 链接:https://leetcode-c.

weixin_44916945的博客 324

华为云CodeHub代码托管

什么是代码托管 代码托管(CodeHub)是面向软件开发者的基于Git的在线代码托管服务,是具备安全管控、成员/权限管理、分支保护/合并、在线编辑、统计服务等功能的云端代码仓库,旨在解决软件开发者在跨地域协同、多分支并发、代码版本管理、安全性等方面的问题。 代码托管具有以下特性 · 在线代码阅读、修改、提交,随时随地开发,不受地域限制。 · 在线分支管理,包含分支新建、切换、合并,实现多分支并行开发,效率高。 master分支:最为稳定,功能比较完整,随时可发布的代码。 develop分支:用于平时开

LUJINYUANA的博客 1万+

SAP系统从ECC升级至S/4 HANA的实现路径及项目过程

从SAP ECC升级到 S/4 HANA,通常是一个复杂的转型过程,涉及到企业资源规划系统的全面现代化

saplakes的博客 2900

(C++)Leetcode狂刷200题——标签“链表篇--简单难度10道 #203. 移除链表元素

第四道、#203. 移除链表元素 删除链表中等于给定值 val 的所有节点。 示例: 输入: 1->2->6->3->4->5->6, val = 6 输出: 1->2->3->4->5 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val.

electrical_engineer0的博客 137

大疆Livox Mid-70雷达的使用

一、前期准备 (一)、使用Livox Viewer测试雷达 1、设置静态IP sudo ifconfig enx081f7152092a 192.168.1.50 查看IP是否设置成功 lacyexsale@lacyexsale-KLV-WX9:~$ ifconfig enx081f7152092a Link encap:以太网 硬件地址 08:1f:71:52:09:2a inet 地址:192.168.1.50 广播:192.168.1.255 掩码:255.255.25

LacyExsale的博客 1万+

用尾插的思想实现移除链表中的元素

用尾插的思想实现移除链表中的元素

2302_80190394的博客 1102

【Unity工具篇】| Unity项目中如何使用LuBan插件,详细集成步骤

前面写了一篇文章用于介绍LuBan的下载及快速使用方法:【Unity实战篇】| 实用插件LuBan,快速上手使用 本篇文章就来介绍一下将LuBan集成到自己的Unity项目的方法。 看完本篇文章之后,就可以直接把LuBan插件放到自己项目中进行配表和使用。

努力前行,总会成为自己心中的那道光 2万+

Figma做原型设计一篇教会你,全栈软件开发必备技能,前后端岗位锐减找工作的底牌

本文介绍了使用Figma进行前端应用原型设计的方法与优势。Figma作为主流设计工具,能够满足大多数应用系统的原型设计需求,强调系统设计应保持简洁合理。文章详细说明了Figma的基本操作流程,包括创建Frame页面、组件使用、交互设置等核心功能,并指出命名规范的重要性。同时对比了Axure、墨刀等其他设计工具的特点,建议根据具体需求选择合适的平台。最后强调原型设计主要关注交互功能展示,业务逻辑应通过需求文档表述。整体而言,Figma凭借其简洁高效的特点,已成为原型设计的优选工具。

有问题或资源连接有缺失的可以私信公众号新潮看世界获取 458

代码随想录算法训练营第3天| 203.移除链表元素 ,707.设计链表 ,206.反转链表

改变链表的next指针的指向,将链表反转。然后开始反转操作,首先要把 cur->next 节点用temp指针保存一下,因为接下来要改变 cur->next 的指向了,将cur->next 指向pre ,此时已经反转了第一个节点了。移除头结点和移除其他节点的操作是不一样的,因为链表的其他节点都是通过前一个节点来移除当前节点,而头结点没有前一个节点。给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点。

qq_44932556的博客 955

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

算法Day3|链表基础;203-移除链表元素;707-设计链表;206-反转链表

题目1: 203-移除链表元素 | 2024-10-17(未通过) | 2024-10-18 (通过)题目2:707-设计链表 | 2024-10-17(未通过) | 2024-10-18(通过)题目3:206-反转链表 | 2024-10-18 (未通过)1、虚拟头节点的目的是为了避免对头节点的特殊处理,涉及到对链表的修改就可以加个头节点。2、双指针法在链表的反转中的应用,花流程图不会被绕。

2401_87704405的博客 633

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

力扣刷题路线

结合高频题、经典题和算法思想学习建议,分阶段从基础到进阶编排,覆盖所有核心标签,并标注题号与学习方法。:画图模拟快慢指针移动,如移动零时快指针探路、慢指针标记非零位置。:括号生成时,左括号数不能超过n,右括号数不能超过左括号数。:LCA问题中,若左右子树均含目标节点,则当前节点为祖先。:终止条件、递归调用、返回值,如二叉树深度递归返回。:掌握虚拟头节点、递归反转、环形检测。:掌握索引操作、快慢指针、滑动窗口。:熟悉括号匹配、单调栈、层序遍历。:熟悉反转、哈希统计、回文处理。

FAQEW的博客 1819

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

代码随想录刷题记录(3)| 链表(链表理论基础,203.移除链表元素 , 707.设计链表,206.反转链表)

链表 | 链表基础、移除链表元素、设计链表、反转链表

weixin_44839832的博客 947

LeetCode - 按标签分类刷题(链表题解)

19. 删除链表的倒数第N个节点 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 1->2->3->5. 双指针: class Solution { public ListNode removeNthFromEnd(ListNode head, int n) { if(head == null){

your_棒棒糖的博客 607

Day3_算法训练营第三天 |203.移除链表元素 707.设计链表206.反转链表

203的思路十分正确但是在处理问题时发现在循环同意原理中我发现特殊情况有点多尤其在头元素的处理上是不一样的是需要额外处理的这就很难受于是我就想可不可以在链表之前加入新的头使原来的头也可以当作中间元素处理。203.移除链表元素 707.设计链表 206.反转链表。203.移除链表元素。

2301_80354488的博客 390

203. 移除链表元素

2021-06-05 LeetCode每日一题 链接:https://leetcode-cn.com/problems/remove-linked-list-elements/ 标签:链表 题目 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。 输入:head = [1,2,6,3,4,5,6], val = 6 输出:[1,2,3,4,5] 输入:head = [], val = 1 输出:[]

秃头哥编程 255

力扣203. 移除链表元素

【代码】力扣203. 移除链表元素。

myprogramc的博客 135

LeetCode203—移除链表元素(java版)

题目描述: 标签:链表 删除链表中等于给定值val的所有节点。 代码: 思路分析:哨兵节点,伪头结点 1、定义一个哨兵节点sentinel,值为0,next指向head; 2、定义一个前驱指针prev和当前指针cur,让prev指向哨兵节点,cur指向头结点,遍历链表有下面两种情况: 如果cur.val = val,删除结点,即prev.next = cur.next; 否则,让前驱结点后移 pre = cur 同时 cur = cur.next /** * Defi...

qq_40840749的博客 130

链表题类型注解解惑:理解Optional,理解ListNode

反思::None是Python对“空指针”这一底层概念的高级抽象。(Python的None就是对C语言中“空指针”这个底层操作的高级包装和简化。

lanbamboo的博客 1082
上一篇: Leetcode 134 题 加油站(标签:贪心算法)
下一篇: Leetcode 199 题 二叉树的右视图
笑忘哭
博客等级 码龄9年 28粉丝 107原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值