news 2026/4/18 23:55:15

第五天链表基础结构与操作|203. 移除链表元素

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
第五天链表基础结构与操作|203. 移除链表元素

1.第 5 天 链表基础结构与操作 203. 移除链表元素 题目建议: 本题最关键是要理解 虚拟头结点的使用技巧,这个对链表题目很重要。 题目链接:https://leetcode.cn/problems/remove-linked-list-elements/ 视频讲解:https://www.bilibili.com/video/BV18B4y1s7R9

2.解题思路

虚拟头节点迭代法

(1) 引入虚拟头节点 dummy :创建一个值为0的虚拟节点,让它的 next 指向原链表的头节点。这样一来,无论原头节点是否需要删除,我们都可以用统一的逻辑处理,避免单独写代码处理头节点的特殊情况。
(2) 遍历链表:用一个指针 cur 从 dummy 开始遍历,检查 cur->next 的值:
- 如果 cur->next->val == val ,说明 cur->next 是要删除的节点,直接让 cur->next = cur->next->next ,跳过该节点;
- 如果不相等,就将 cur 移动到 cur->next ,继续遍历。
(3) 返回结果:遍历结束后, dummy->next 就是新链表的头节点。

3.遇到的问题

(1) 头节点处理不当
一开始直接从 head 开始遍历,遇到 head->val == val 时,不知道如何更新头节点,导致代码逻辑混乱。虚拟头节点就是解决这个问题的最佳方案。
(2) 删除节点后指针移动错误

删除 cur 节点后, cur 直接移动到 cur->next ,但此时 cur 已经是被删除的节点,会导致遍历出错。正确的做法是:删除节点时不移动 cur ,不删除时才移动。

4.代码

/**

* Definition for singly-linked list.

* 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) {}

* };

*/
class Solution {
public:
ListNode* removeElements(ListNode* head, int val) {
ListNode* dummyHead = new ListNode(0);
dummyHead->next = head;
ListNode* cur = dummyHead;
while (cur->next != NULL) {
if(cur->next->val == val) {
ListNode* tmp = cur->next;
cur->next = cur->next->next;
delete tmp;
} else {
cur = cur->next;
}
}
head = dummyHead->next;
delete dummyHead;
return head;
}
};

5.收获

1. 虚拟头节点的技巧
这是链表题中非常实用的技巧。当需要频繁修改头节点时,引入虚拟头节点可以统一处理逻辑,避免单独判断头节点,让代码更简洁、更健壮。
2. 链表删除的核心逻辑
删除节点的本质是修改前驱节点的 next 指针,让它直接指向目标节点的后继节点,从而跳过目标节点。操作时必须保证:
- 持有目标节点的前驱节点指针;
- 操作后链表不会断裂。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 23:53:14

DeOldify背后的循环神经网络:LSTM在时序色彩预测中的作用浅析

DeOldify背后的循环神经网络:LSTM在时序色彩预测中的作用浅析 给黑白照片上色,听起来像是魔法。但如果你用过DeOldify这类工具,会发现它上色后的照片,色彩不仅鲜艳,而且特别“合理”——天空是蓝的,树叶是…

作者头像 李华
网站建设 2026/4/18 23:51:12

如何成为一个AI Agent 工程师?

上周我帮一个朋友复盘他字节Agent岗终面挂掉的原因,发现面试官问的全是实打实的工程落地细节,根本不考那些死记硬背的八股文。他说自己每道题都答了,但就是没通过。我把面试官问的问题要了过来,还补充了面试官真正想听到的答案深度…

作者头像 李华
网站建设 2026/4/18 23:47:18

探索DST-VII:H.266标准中的离散正弦变换核心

1. 离散正弦变换(DST)基础入门 第一次接触视频编码标准的朋友可能会被各种变换算法搞得晕头转向。我自己刚开始研究H.266/VVC时,看到DST-VII这个名词也是一头雾水。经过几个月的实际项目打磨,现在终于能把这个复杂的技术用简单的方…

作者头像 李华
网站建设 2026/4/18 23:46:34

安装宝塔面板提示缺少必要的依赖包_批量安装系统库

宝塔面板安装报错“缺少依赖包”主要指gcc、glibc-devel、libffi-devel、openssl-devel、curl、wget及对应系统的python3-devel或python3-dev;需按CentOS/RHEL系或Ubuntu系分别执行dnf/yum/apt命令安装,且须确保系统源启用、Python3软链正确、时间同步及…

作者头像 李华