Leetcode0203
移除链表元素
题目描述
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。
示例 1:
1 | 输入:head = [1,2,6,3,4,5,6], val = 6 |
示例 2:
1 | 输入:head = [], val = 1 |
示例 3:
1 | 输入:head = [7,7,7,7], val = 7 |
提示:
- 列表中的节点数目在范围
[0, 104]内 1 <= Node.val <= 500 <= val <= 50
基本思路
刚开始思路非常简单:检测到下一个节点是val,删除该节点。写出了下面这段蠢到家的代码:
1 | /** |
仔细一看题:发现“新的头节点”还特意加粗了,看起来如果第一个节点就是空节点程序会直接寄掉。
cur->next = cur->next->next;表示删除当前节点的下一个节点。这会导致无法处理连续相同值的节点。正确的做法是将当前节点的next指针直接指向下下个节点,而不是跳过一个节点。- 函数的返回值是链表的头指针
head,但是在删除节点的过程中,链表头部可能发生变化。因此,应该在删除节点后返回新的头指针。
修改为以下程序:
1 | /** |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 全之の博客!

