203-移除链表元素

LeetCode203移除链表元素 算法特点及适用场景特点采用递归的方式实现链表节点的移除操作,代码结构简洁明了,逻辑清晰,非常符合链表这种数据结构通过指针依次访问节点的特点,易于理解和实现。它能够准确地移除链表中所有值为指定值的节点,保证了链表结构在处理后的正确性。时间复杂度为 $O (n)`,在处理链表节点移除问题上具有较好的效率表现,只要链表的节点数量在可接受范围内,都能快速地完成移除操作。适用场景。 阅读详情

题目

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

输入: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
输出:[]

题解一

/**
 * 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){
            ListNode delNode=head;
            head=head.next;
            delNode.next=null;
        }

        if(head==null){
            return null;
        }

        ListNode pre=head;
        while(pre.next!=null){
            if(pre.next.val==val){
                ListNode delNode=pre.next;
                pre.next=delNode.next;//注意理解!将指针后移!
                delNode.next=null;
            }else{
                pre=pre.next;
            }
        }
        return head;
    }
}

思路:不使用虚拟头节点,需要考虑头为空或者头为value的情况。

题解二

class Solution {
    public ListNode removeElements(ListNode head, int val) {
        ListNode dummyHead=new ListNode(-1);
        dummyHead.next=head;
        ListNode pre=dummyHead;
        while(pre.next!=null){
            if(pre.next.val==val){
                pre.next=pre.next.next;
            }else{
                pre=pre.next;
            }
        }
        return dummyHead.next;
    }
}

思路:有虚拟头节点的情况下就不需要对头节点进行进一步的处理了。

题解三

class Solution {
    public ListNode removeElements(ListNode head, int val) {
        if(head==null){
            return null;
        }
        ListNode res=removeElements(head.next,val);
        if(head.val==val){
            return res;//相当于删除head
        }else{
            head.next=res;
            return head;//将head后面的链表删除后的结果与head相连
        }
    }
}

笔记:递归的方法

LeetCode 203:移除链表元素 python LeetCode 203:移除链表元素 python 第一次用python写链表,我在怀疑自己到底有没有学过python, 题目已经定义了节点,所以不用自己写,但是没给定义链表啊,呜呜呜所以调试用掉了我很大很大的力气 一、题目 题目传送门—— https://leetcode-cn.com/problems/remove-linked-list-elements/ 二、解析 最简单的单链表删除元素,是链表模块的入门级别了,链表删除主要考虑三种情况 1.空链表,也就是 head == None,这种情况直接 阅读详情

相关推荐

实战避坑:示波器测量非隔离开关电源的炸机风险与隔离方案

本文详细分析了使用示波器测量非隔离开关电源时的炸机风险,揭示了地线环路导致的短路问题,并对比了四种防炸机解决方案,包括示波器隔离供电、拔掉电源地线、使用差分探头和被测板隔离供电。重点推荐使用隔离变压器方案,确保测量安全与精度,同时提供了实操建议与经验分享,帮助工程师避免常见测量事故。

weixin_29224309的博客 564

leetcode 链表 203. 移除链表元素

else部分的作用是当当前节点cur的下一个节点的值不等于要删除的值val时,将cur指针指向下一个节点,继续遍历链表。如果不进行这个判断,当cur已经是链表的最后一个节点时,尝试访问cur->next->val会导致程序出错,因为此时cur->next为NULL,不能再访问其成员变量val。,此时 head 指向了原来节点的下一个节点,而 tmp 仍然指向原来的节点;移除头结点和移除其他节点的操作是不一样的,因为链表的其他节点都是通过前一个节点来移除当前节点,而头结点没有前一个节点。

挥剑决浮云的博客 1076

同源策略与跨域

前言:最近业务上前端同学多次联系说访问腾讯云cos资源的时候因为跨域的问题访问不到。大致看了下腾讯云关于设置跨域访问的教程,按照前端同学给的域名等选项就给配了,而且测试下来也是好的。但是呢一直不知道什么是跨域这里就做一个简单的学习记录。 一、同源策略 同源策略(Same Origin Policy)是一种约定,它是浏览器最核心也是最基本的安全功能。同源策略会阻止一个域的javascrip脚本和另一个域的内容进行交互,是用于隔离潜在恶意文件的关键安全机制;关于这一点我们后面会举例说明。...

mijichui2153的博客 1万+

【链表】LeetCode #203 移除链表元素

题目链接: LeetCode #203 移除链表元素 题目描述: #203. 移除链表元素 删除链表中等于给定值 val 的所有节点。 示例: 输入: 1->2->6->3->4->5->6, val = 6 输出: 1->2->3->4->5 通过次数92,417 提交次数201,211 分析: 本题是道简单题,但是想一次就A还是有点儿不容易的。 需要注意的有以下几点: 要做删除操作,需要找到的是被删节点的前一个节点,这样只需让 i.next

Code_Yilia的博客 295

基于STM32设计的便携式心电信号监测系统_474

本课题设计并实现了一种基于STM32单片机的便携式心电信号监测系统。系统以STM32F103C8T6为核心控制单元,结合PulseSensor心率传感器,实现对人体心率信号的采集与处理。通过单片机内部ADC模块对传感器输出的模拟电压信号进行采样,并对采集数据进行分析处理,从而计算得到实时心率值。

168

AE(自动曝光)调试策略:曝光曲线设计与过曝控制

自动曝光(AE, Auto Exposure)系统是图像质量控制链路中的核心模块之一,其性能直接决定了成像亮度是否稳定、细节是否完整、场景切换是否自然。在现代移动终端影像系统中,AE 不仅需要适应不同光照强度和复杂环境,还需兼顾人脸优先、HDR触发、视频帧率控制等多目标优化需求。本文基于高通 Snapdragon 和 MTK Dimensity 等主流平台的调试经验,系统梳理了 AE 模型设计原则、曝光曲线配置、测光策略选择与过曝抑制机制,并结合典型实战案例,提供可复制的工程落地路径。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 3097

【LeetCode_203】移除链表元素

C++实现LeetCode第203题:移除链表元素

有梦想的电信狗 903

损失函数大汇总(五十三)(Boundary Loss附公式推导与代码)

摘要 Boundary Loss是一种针对图像分割任务的新型损失函数,特别适用于高度类别不平衡的细粒度分割场景。与传统的区域型损失(如Dice、交叉熵)不同,它通过计算预测边界与真实边界之间的距离来优化模型,更关注边界精度而非区域重叠。核心思想是利用距离图(distance map)将边界约束转化为区域积分形式,实现端到端训练。具体实现中,损失函数为预测概率与距离图的点积,梯度仅取决于距离图,具有明确的空间引导性。相比区域型损失,Boundary Loss能更好处理小目标、细长结构等边界敏感任务,可与Dic

悦学共鸣,温柔以待,汇聚光芒,共同成长 241

203. 移除链表元素

之所以//尾部遍历,是因为如果删除当前的值,那么就又需要当前的前面去连接当前的后面。递归遍历链表,然后从后往前找,判断ListNode是不是需要删除的val。而普通链表只能链接后面,不能链接前面。针对上面的问题,引入了。

Wzideng@qq.com 1125

ADRC自抗扰算法优化(PLC梯形图篇)

ADRC自抗扰算法PLC梯形图完整源代码请参看下面博客文章:ADRC自抗扰控制算法(含梯形图完整源代码和算法公式)_adrc算法_RXXW_Dor的博客-优快云博客PLC的自抗扰控制(ADRC)算法_RXXW_Dor的博客-优快云博客_adrc算法1、自抗扰控制算法,网上很多文章有所讲解,大家也可以关注韩京清教授的论文和书籍,这里就不赘述了,下面给出梯形图+SCL代码。

RXXW_Dor的博客 2284

ATE Pin Electronics电路学习总结

PinElectronics(PE)是ATE测试机的核心模拟前端电路,负责ATE与芯片间的信号转换与交互。主要包含四大功能模块:Driver实现逻辑信号到模拟电平的转换(VIH/VIL可编程);Receiver对DUT输出进行采样比较(VOH/VOL判定);ActiveLoad施加可编程电流负载;PPMU进行精密电压/电流测量。PE的性能直接影响功能测试和直流参数测试的精度,需定期校准维护。关键参数包括:Driver电压精度(±5mV)、Receiver比较精度(±10-50mV)、PPMU测量精度(±1-

歌颂苦难的行为是无耻的; 470

力扣203:移除链表元素

这句话我初学的时候看了好几遍,最终明白是让cur的下一个节点变成下一个的下一个节点,即把cur后面的第二个节点赋值给cur的下一个节点,这样cur原来的下一个节点就没有指向他的节点,可以看做是删除的操作。由于5不等于val,所以第三个节点指向的节点为5节点本身,,此时对第三个节点进行操作,第三个节点的值等于val所以返回当前节点的下一个节点就是5,完成了删除6的操作。由于val=6,返回的是当前节点的next节点,即5完了返回的是空节点,完成了删除最后一个节点的操作。此时对倒数第二个节点进行操作。

2302_80043968的博客 1578

自然语言处理之话题建模:BERTopic模型详解

BERTopic是一种基于BERT的先进话题建模技术,它结合了BERT的语义理解能力和非参数聚类算法HDBSCAN的灵活性,能够生成高质量、语义丰富的话题。与传统的LDA(Latent Dirichlet Allocation)话题模型相比,BERTopic能够更好地捕捉文本的复杂语义结构,因为它利用了预训练的BERT模型来嵌入文本,从而在话题建模中引入了深度学习的力量。聚类是无监督学习的一种,其目标是将数据集中的样本按照相似性进行分组,每个组称为一个“簇”。

zhubeibei168的博客 4545

LeetCode203. 移除链表元素

LeetCode203. 移除链表元素code code // leetcode 203 移除链表元素 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {}...

坚果 142

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

LeedCode 203.移除链表元素

为了让大家能更多的练习如何使用链表,今天再给大家带来一篇LeedCode中第203道题移除链表元素的题目,希望今天同样可以为大家讲明白这道经典的链表题目,帮助大家解决这道题中一些难点。LeedCode中的链表该如何使用-优快云博客这一道题可以算是链表中比较简单的一道题了,我今天讲解这道题的原因也是希望一些刚开始学习链表的同学可以通过这道相对简单的题来上手做出自己链表的第一道题目。题目链接我依然会放在结语位置,如果学会也自己动手做做吧。好了,废话也不多说了,现在开始讲解题目。

2403_88488897的博客 1112

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

力扣203. 移除链表元素

给你一个链表的头节点head和一个整数val,请你删除链表中所有满足的节点,并返回。[][]

2301_79385646的博客 888

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Leetcode203之移除链表元素

Leetcode203之移除链表元素 1、题目描述 2、代码运行 2.1 错误代码展示 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; ...

sunshine 409

leecode 每日一题 一起进步 203 移除链表元素

leecode 203 移除链表元素 题目描述解答 题目描述 删除链表中等于给定值 val 的所有节点。 示例: 输入: 1->2->6->3->4->5->6, val = 6 输出: 1->2->3->4->5 解答 做题过程中两个注意的点 一个是头节点值的判断,所以加一个虚拟头节点 第二个是等于该值节点的删除 /** * D...

clearlove_7的博客 194

203.移除链表元素

摘要: 题目要求删除链表中所有等于给定值的节点。解决方法有两种:1)直接操作原链表,需单独处理头节点;2)使用虚拟头节点,统一删除逻辑。示例代码展示了两种实现方式:无头结点版本需先处理头部连续目标值,再遍历剩余节点;有虚拟头结点版本则通过dummy节点简化操作,统一处理所有节点。两种方法时间复杂度均为O(n)。使用C++时建议手动释放内存,而Java/Python无需考虑。关键点在于正确处理节点指针的更新和边界条件。

m0_68880377的博客 572

golang leetcode203移除链表元素

如果当前节点的值不等于 val,那么我们需要保留这个节点,并将其 next 指针指向递归调用的结果。但在递归中,我们没有直接的方式来访问父节点,因此我们通过返回下一个节点(head.next)来实现这一点。:递归的最终结果是新的链表头节点,它可能与原始链表的头节点不同,尤其是当原始头节点的值等于 val 时。:对于每个节点,调用递归函数处理它的下一个节点(即,调用自身传递 head.next 和 val)。如果是,我们需要删除这个节点,这意味着需要将其父节点(递归中的上一个节点)连接到它的下一个节点。

kingsill的博客 907

leetcode203-----移除链表元素

203. 移除链表元素 - 力扣(LeetCode)给你一个链表的头节点head和一个整数val,请你删除链表中所有满足的节点,并返回新的头节点。示例 2:[]示例 3:[]列表中的节点数目在范围[0, 10^4]内时间复杂度O(n),其中n是链表的长度,因为我们需要遍历整个链表两次(一次删除头节点,一次删除非头节点)。空间复杂度O(1),只使用了常数的额外空间来存储指针。这样,代码的性能较为高效,适用于较长的链表。

xinxin的博客 1007

力扣203 移除链表元素

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

2202_75601845的博客 428

Java题目详解——LeetCode203. 移除链表元素

比如上图,如果我们想删除 "6" 这个结点元素,让 "2" 直接指向 "3" ,从而实现删除 "6" 的操作,此时使要删除的结点(cur)为 "6" ,那么我们就需要一个结点来记录要删除结点(cur)的前驱结点(prev),从而使该结点(cur)的前驱结点(prev)直接指向该结点(cur)的后续结点(cur.next)。其次,应该在循环遍历的基础上进行特定结点的删除工作,当结点元素的值(cur.val)和传入值(val)相等时,删除该结点。输入:head = [7,7,7,7], val = 7。

lil_ghost_的博客 1029
上一篇: 91-解码方法(分割整数)包含String相关方法
下一篇: 300-最长递增子序列(最长递增子序列)
codrab
博客等级 码龄10年 15粉丝 98原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

codrab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值