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

链表题解——移除链表元素【LeetCode】

全部题目来自力扣,这里只做学习的记录,内容中部分为AI生成,有不对的地方可以评论或者私信哦~~

203. 移除链表元素

一、算法逻辑(每一步通顺讲解思路)

1️⃣ 初始化虚拟头节点和指针

  • 创建一个哨兵节点 dummy,它的 next 指向原链表的头节点。这样即使头节点本身被删除,也能通过 dummy.next 返回正确结果。

  • 再用 cur 指针从 dummy 开始遍历,用于构建新的链表。


2️⃣ 遍历链表并判断是否需要删除

  • 使用 cur.next 来判断下一个节点是否存在;

  • 如果 cur.next.val == val,说明找到了需要删除的节点;

    • 这时直接跳过该节点:cur.next = cur.next.next

    • 删除操作不会向前推进 cur,因为跳过后还要检查新接上的节点;

  • 否则,如果当前节点不是目标值,就将 cur 向后推进一位。


3️⃣ 返回新链表的头节点

  • 删除操作完成后,返回的是 dummy.next,它指向的是链表的有效起始节点(不管原始头节点是否被删除)。


二、核心点总结

这段算法的核心思想是:

引入虚拟头节点,统一处理所有删除逻辑,避免特判头节点。

  • ✅ 哨兵节点消除了对头节点是否是目标值的特殊处理;

  • ✅ 通过操作 cur.next 删除下一个节点,避免在删除操作中提前丢失遍历控制;

  • ✅ 整体逻辑清晰,边界处理优雅,具备高度可拓展性(可用于更复杂的删除规则中)

# 虚拟头节点法
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = nextclass Solution:def removeElements(self, head: Optional[ListNode], val: int) -> Optional[ListNode]:# 创建虚拟头部节点以简化删除过程dummy_head = ListNode(next = head)# 遍历列表并删除值为val的节点current = dummy_headwhile current.next:if current.next.val == val:current.next = current.next.nextelse:current = current.nextreturn dummy_head.next

三、时间复杂度分析

每个节点最多被访问一次(遍历过程中或被删除):

时间复杂度:O(n),其中 n 是链表的节点数。


四、空间复杂度分析

只使用了常数级别的辅助变量(dummycur):

空间复杂度:O(1)


✅ 总结一句话

这段代码利用哨兵节点和“跳过目标节点”策略,在 O(n) 时间和 O(1) 空间内高效删除链表中所有目标值节点,是链表操作中**“虚拟头节点 + 单指针改链”**的典范写法。

http://www.dtcms.com/a/262857.html

相关文章:

  • 中国电子学会等级考试Python编程真题+答案+解析
  • Spring 依赖注入:官方推荐方式及最佳实践
  • MySQL索引失效场景分析
  • 数据结构笔记5:环形链表的数理分析
  • mysql 小版本升级实战分享
  • 力扣 hot100 Day30
  • 开疆智能CCLinkIE转Canopen网关连接台达伺服驱动器配置案例
  • 自己电脑搭建本地服务器并实现公网访问,内网也能提供互联网连接使用
  • 七层负载均衡和四层负载均衡
  • 打卡day58
  • 数据库表关系设计详解:一对一、一对多、多对多及自关联
  • ShardingSphere完成MySQL集群部署
  • Vue3静态文档资源展示的实现和使用总结
  • 国产车哪款有远程代驾功能?远程代驾+自动驾驶
  • DDoS攻击及其防护方案
  • 超大js文件多层级引用缓存在网络较差的时候无法调用使用问题
  • Rust C++ OpenCV kafka-rs实践
  • 生成式人工智能实战 | 变分自编码器(Variational Auto-Encoder, VAE)
  • 二刷 苍穹外卖day09
  • macos 安装 xcode
  • 借助 KubeMQ 简化多 LLM 集成
  • 深度学习专栏总结
  • 生信分析之流式数据分析:Flowjo 软件核心功能全解析
  • Openssl升级
  • 使用 LoRA 微调大模型:关键参数与最佳实践全解析
  • 深度解析基于贝叶斯的垃圾邮件分类
  • 数字孪生技术为UI前端注入灵魂:实现产品全生命周期的可视化管理
  • 银河麒麟系统上利用WPS的SDK进行WORD的二次开发
  • linux docker 客户端操作数据卷
  • Excel转pdf实现动态数据绑定