链表元素删除详解 - 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!