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

链表基础与虚拟头结点 ——203. 移除链表元素

一、今日学习总结

今天正式进入链表模块的学习。链表是一种与数组截然不同的数据结构,其节点在内存中不连续,通过指针(引用)连接。

核心任务是 LeetCode 203「移除链表元素」。这道题看似简单,却完美揭示了链表操作的一个关键技巧——虚拟头结点(Dummy Node)。使用虚拟头结点可以统一处理头结点和普通节点的删除逻辑,避免繁琐的特殊判断。


二、链表基础回顾

1. 链表结构示意

text

头结点 ↓ ┌───┬───┐ ┌───┬───┐ ┌───┬───┐ │ 1 │ ●─┼──→│ 2 │ ●─┼──→│ 3 │ ●─┼──→ NULL └───┴───┘ └───┴───┘ └───┴───┘ val next val next val next

2. 数组 vs 链表对比

特性数组链表
内存分配连续内存非连续内存
访问方式随机访问 O(1)顺序访问 O(n)
插入/删除O(n)(需要移动元素)O(1)(已知前驱节点)
缓存友好性

3. 链表节点定义

cpp

struct ListNode { int val; ListNode *next; ListNode() : val(0), next(nullptr) {} ListNode(int x) : val(x), next(nullptr) {} ListNode(int x, ListNode *next) : val(x), next(next) {} };

三、题目详解

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

示例:

text

输入:head = [1,2,6,3,4,5,6], val = 6 输出:[1,2,3,4,5]

四、解题思路

4.1 核心难点:头结点的特殊性

在链表中,删除普通节点只需要:

text

prev->next = curr->next;

但要删除头结点时,情况不同:

  • 头结点没有前驱节点

  • 删除后需要更新头指针

如果单独处理头结点,代码会变得冗长且容易出错。

4.2 解决方案:虚拟头结点

在真正的头结点前面添加一个虚拟节点,它的next指向head

text

dummy → 1 → 2 → 6 → 3 → ... ↑ newHead (dummy->next)

优势:

  • 原来的头结点现在有了前驱(dummy)

  • 所有节点的删除逻辑完全统一

  • 最后返回dummy->next即可

4.3 算法步骤

  1. 创建虚拟头结点dummy,其next指向head

  2. 初始化prev = dummycurr = head

  3. 遍历链表:

    • curr->val == val:删除currprev->next = curr->next

    • 若不等:移动prev = curr

    • 移动curr = curr->next

  4. 返回dummy->next

http://www.jsqmd.com/news/658203/

相关文章:

  • 新鲜出炉!Claude Code之父亲授 Opus 4.7 最佳实践
  • GM8775C MIPI转LVDS实战避坑指南
  • 数据库性能优化实战
  • 大语言模型会在“教学”中夹带“私货”
  • Claude API 怎么用?2026 实测 3 种接入方案,手把手配到能跑
  • 学术AI写作的“灰犀牛”来了:2026奇点大会预警的3类隐形学术不端陷阱,及配套的CrossCheck+LLM双验签工作流
  • 从‘心跳’到‘急停’:图解CANopen CIA 402状态机,让你的电机控制逻辑不再混乱
  • Gerber文件防泄密?手把手教你用Altium Designer 20规则实现过孔全自动盖油
  • 如何在按需导入类时动态执行其内部代码
  • Claude Opus 4.7 正式发布:Anthropic 在推理模型上的又一次突破
  • 从自动驾驶到AI医生:拆解5个真实案例,看多模态融合如何解决行业难题
  • Cloudflare 电子邮件服务开启公开测试版,为智能体打造全功能双向通信平台
  • 从HTB CozyHosting靶机渗透实战看SpringBoot应用安全与权限提升
  • 如何完全掌控你的微信聊天记录?WeChatMsg终极解决方案指南
  • 适合Bootstrap初学者的五个开源实战项目
  • PEG-Chit-NH₂-Fe₃O₄ NPs,Chitosan-PEG-NH₂修饰四氧化三铁纳米颗粒,反应特点
  • Vant UI 实战:Tab标签页、List列表和PullRefresh下拉刷新在移动端H5项目中的避坑指南
  • 浙大PTA C语言实验题保姆级通关攻略:从Hello World到链表逆置的避坑心得
  • 不同于杨立昆、李飞飞空间智能的人机环境系统智能空间
  • 告别万用表!用INA260和RT-Thread Sensor框架,5分钟搞定嵌入式系统功耗精准监测
  • PEG-HA-COOH-Fe₃O₄ NPs,聚乙二醇-透明质酸-羧基修饰四氧化三铁纳米颗粒,化学结构特点
  • ConvLSTM核心代码逐行解读:从PyTorch实现到自定义数据集加载的避坑指南
  • 从零封装一个高复用Avue-Echarts组件:以折线图为例的完整开发流程
  • C语言:字符数组和字符串指针
  • Centos 7安装python3
  • 别再死记硬背SPI时序了!用Arduino+逻辑分析仪5分钟搞懂CPOL/CPOL四种模式
  • 汇川PLC H5U与 Easy523进行MODBUS-RTU(485)通信
  • centos 配置国内yum源2026新
  • 2026年4月重庆GCS开关柜市场深度解析与重庆宇轩机电设备有限公司价值评估 - 2026年企业推荐榜
  • 3个元数据管理难题,如何用可视化工具优雅解决?