LeetCode 0203. 移除链表元素
Posted Tisfy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 0203. 移除链表元素相关的知识,希望对你有一定的参考价值。
【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
(相当于往后继续遍历)
🌹
- 时间复杂度 O ( n ) O(n) O(n),其中 n n n是链表节点个数
- 空间复杂度 O ( 1 ) O(1) O(1)
AC代码
C++
class Solution
public:
ListNode* removeElements(ListNode* head, int val)
ListNode* ansHead = new ListNode;
ansHead->next = head;
ListNode* last = ansHead, *current = ansHead->next;
while (current)
if (current->val == val)
last->next = current->next;
// delete current; // Here should delete actually
current = current->next;
else
last = current;
current = current->next;
// ListNode* head = ansHead;
// delete head;
return ansHead->next;
;
同步发文于CSDN,原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/126417421
以上是关于LeetCode 0203. 移除链表元素的主要内容,如果未能解决你的问题,请参考以下文章
leetcode 203. 移除链表元素(Remove Linked List Elements)
LeetCode203-移除链表元素(哨兵位头节点法重点解释)
[JavaScript 刷题] 链表 - 移除链表元素, leetcode 203