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,那么就让lastnext指向currentnext,并将current指向currentnext(相当于删除了current
  • 否则,将last指向current,并将current指向currentnext(相当于往后继续遍历)

🌹

  • 时间复杂度 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)

[算法] leetcode单链表相关题目详解

LeetCode203-移除链表元素(哨兵位头节点法重点解释)

[JavaScript 刷题] 链表 - 移除链表元素, leetcode 203

[JavaScript 刷题] 链表 - 移除链表元素, leetcode 203

LeetCode ( 203 ) ---[移除链表元素]