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

leetcode203. Remove Linked List Elements

给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。
Given the head of a linked list and an integer val, remove all the nodes of the linked list that has Node.val == val, and return the new head.
在这里插入图片描述套路 1

要想删除节点 node,必须在 node 的前一个节点执行删除操作。

例如链表 1→2→3,要想删除 2,必须在节点 1 处操作,也就是把节点 1 的 next 更新为节点 3。
套路 2

如果头节点可能被删除,那么要在头节点之前添加一个哨兵节点,这样我们无需特判头节点被删除的情况,从而简化代码逻辑。

或者说,根据套路 1,要想删除头节点,必须在头节点的前一个节点操作,所以要添加一个哨兵节点。
算法

初始化哨兵节点 dummy,其 next 为 head。
遍历链表,初始化 cur=dummy。
循环直到 cur 的下一个节点为空。
如果 cur 的下一个节点的值等于 val,那么删除下一个节点,把 cur.next 更新为 cur.next.next。
如果 cur 的下一个节点的值不等于 val,那么不删除下一个节点,继续看下下一个节点是否要删除,即更新 cur 为 cur.next。
循环结束,返回 dummy.next,即删除节点后的新链表的头节点。

答疑

问:为什么没有修改 dummy,但 dummy.next 却是新链表的头节点?如果删除了 head,那么最后返回的是不是原链表的头节点?

答:注意初始化时,cur 和 dummy 都指向同一个节点,cur 和 dummy 只是同一个节点的引用,所以修改 cur.next 也会同时修改 dummy.next。

问:为什么删除下一个节点后,不需要更新 cur 为 cur.next?

答:删除下一个节点后,cur.next 的节点值也可能等于 val,也需要删除,如果直接更新 cur 为 cur.next,就漏删了节点。

class Solution:
    def removeElements(self, head: Optional[ListNode], val: int) -> Optional[ListNode]:
        cur = dummy = ListNode(next=head)
        while cur.next:
            if cur.next.val == val:
                cur.next = cur.next.next  # 删除下一个节点
            else:
                cur = cur.next  # 继续向后遍历链表
        return dummy.next

http://www.kler.cn/a/380613.html

相关文章:

  • 如何用gpt来分析链接里面的内容(比如分析论文链接)和分析包含多个文件中的一块代码
  • HTML基础学习(2)
  • 五种msvcr100.dll丢失的解决方法,有效修复msvcr100.dll丢失错误!跟msvcr100.dll错误问题说拜拜!
  • Windows开启IIS后依然出现http error 503.the service is unavailable
  • 基于Spring Boot的九州美食城商户一体化系统
  • GitCode 光引计划投稿|JavaVision:引领全能视觉智能识别新纪元
  • 【AI】【提高认知】深度学习与反向传播:理解AI的基础
  • mutable用法
  • FastAPI 目录结构推荐
  • 了解神经网络中的激活函数
  • 【VSCode / Source Insight 4】设置关键字高亮的插件 | Highlight Word
  • AutoCAD2019
  • C++现代教程七之模块
  • uni-app在H5页面唤起小程序登录 然后再回到当前页面
  • 算法简介:动态规划
  • (十一)JavaWeb后端开发——分层解耦
  • 基于SSD模型的行人跌倒、摔倒检测系统,支持图像、视频和摄像实时检测【pytorch框架、python源码】
  • 【Redis】一种常见的Redis分布式锁原理简述
  • 如何无缝更换WordPress主题:关键步骤详解
  • 微服务透传日志traceId
  • 【设计模式系列】原型模式(十一)
  • HarmonyOS NEXT应用元服务开发组合场景
  • 运维工具之docker入门
  • Win10搭建SFTP服务器
  • 系统缺失msvcp140_1.dll?解决msvcp140_1.dll缺失问题,
  • AiPPT - 全智能 AI 一键生成 PPT