链表元素删除详解 - LeetCode 203 题解
LeetCode 203. 移除链表元素
题目描述
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。
示例 1:

输入:
head = [1,2,6,3,4,5,6], val = 6
输出:[1,2,3,4,5]
示例 2:
输入:
head = [], val = 1
输出:[]
示例 3:
输入:
head = [7,7,7,7], val = 7
输出:[]
提示:
- 列表中的节点数目在范围 $[0, 10^4]$ 内
- $1 \le {Node.val} \le 50$
- $ 0 \le {val} \le 50$
思路
用 cur 表示当前节点,如果 cur 的下一个节点不为空且下一个节点的节点值等于给定的 val ,则需要删除下一个节点。如果 cur 的下一个节点的节点值不等于给定的 val ,则保留下一个节点,将 cur 移动到下一个节点即可。
当 cur 的下一个节点为空时,链表遍历结束,此时所有节点值等于 val 的节点都被删除。
具体实现方面,由于链表的头节点 head 有可能需要被删除,因此创建哑节点 dummyHead ,令 dummyHead -> next=head,初始化 cur = dummyHead,然后遍历链表进行删除操作。最终返回 dummyHead -> next 即为删除操作后的头节点。

C++代码
1 | /** |
- 时间复杂度:
O(n) - 空间复杂度:
O(1)
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 chengoasis!



