203.移除链表元素
【LetMeFly】203.移除链表元素:添加临时头节点以便操作
力扣题目链接:https://leetcode.cn/problems/remove-linked-list-elements/
给你一个链表的头节点 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, 104]
内 1 <= Node.val <= 50
0 <= val <= 50
方法一:添加临时头节点以便操作
这个解法的思路是,添加一个临时头节点,并把临时头节点的next
指向原始头节点。这样,就避免了删除头节点的麻烦操作。之后遍历并删除值为val
的节点。最后,返回临时头节点的下一个节点即可。
具体遍历删除方法为:
使用两个指针,last
指向上一个元素,current
指向当前遍历到的元素。(初始值current = head
,相应地,last = 临时头节点
)
之后在当前指针current
不为空时:
- 如果
current
的值恰好等于val
,那么就让last
的next
指向current
的next
,并将current
指向current
的next
(相当于删除了current
) - 否则,将
last
指向current
,并将current
指向current
的next
(相当于往后继续遍历)
:rose:
- 时间复杂度$O(n)$,其中$n$是链表节点个数
- 空间复杂度$O(1)$
AC代码
C++
1 |
|
同步发文于CSDN,原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/126417421
203.移除链表元素
https://blog.letmefly.xyz/2022/08/19/LeetCode 0203.移除链表元素/