首页 > 其他分享 >力扣-203. 移除链表元素

力扣-203. 移除链表元素

时间:2024-05-01 12:11:56浏览次数:26  
标签:力扣 head ListNode cur val int next 链表 移除

1.题目

题目地址(203. 移除链表元素 - 力扣(LeetCode))

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

2. 题解

2.1 迭代

思路

设置一个虚拟头结点 dummyhead, 接上head,防止head被删除,导致的heap-use-after-free 访问堆中已释放的地址异常

代码

  • 语言支持:C++

C++ Code:


/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* removeElements(ListNode* head, int val) {
        ListNode* dummyHead = new ListNode(0, head);
        ListNode* cur = head, * prev = dummyHead;
        while (cur != nullptr) {
            if (cur->val == val) {
                prev->next = cur->next;
                delete cur;
                cur = prev->next;
            } else {
                prev = prev->next;
                cur = cur->next;
            }
        }
        return dummyHead->next;
    }
};

复杂度分析

令 n 为数组长度。

  • 时间复杂度:\(O(n)\)
  • 空间复杂度:\(O(1)\)

2.2 递归

思路

设置返回条件和递归条件即可

代码

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* removeElements(ListNode* head, int val) {
        if(head == nullptr) return head;
        head->next = removeElements(head->next, val);
        return head->val == val ? head->next : head;
    }
};

标签:力扣,head,ListNode,cur,val,int,next,链表,移除
From: https://www.cnblogs.com/trmbh12/p/18169205

相关文章

  • TODO-力扣-46. 全排列
    1.题目题目地址(46.全排列-力扣(LeetCode))https://leetcode.cn/problems/permutations/题目描述给定一个不含重复数字的数组nums,返回其所有可能的全排列。你可以按任意顺序返回答案。 示例1:输入:nums=[1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,......
  • 力扣-852. 山脉数组的峰顶索引
    1.题目题目地址(852.山脉数组的峰顶索引-力扣(LeetCode))https://leetcode.cn/problems/peak-index-in-a-mountain-array/?envType=study-plan-v2&envId=primers-list题目描述符合下列属性的数组arr称为山脉数组:arr.length>=3存在i(0<i <arr.length-1)使得: ......
  • 链表逆序
    数据结构链表逆序笔试题:编写一个函数,实现单链表逆序代码//方法一:将尾结点循环插到头节点后面,实现逆序voidreverse_list(single_list*head){single_list*p=head->next;//将链表除头节点的节点保存head->next=NULL;//将链表断开single_list*tmp=......
  • 双向链表
    双向链表接口设计//指的是双向链表中的结点有效数据类型,用户可以根据需要进行修改typedefintDataType_t;//构造双向链表的结点,链表中所有结点的数据类型应该是相同的typedefstructDoubleLinkedList{ DataType_tdata; //结点的数据域 structDoubleLinkedList......
  • 力扣-258. 各位相加
    1.题目题目地址(258.各位相加-力扣(LeetCode))https://leetcode.cn/problems/add-digits/?envType=study-plan-v2&envId=primers-list题目描述给定一个非负整数num,反复将各个位上的数字相加,直到结果为一位数。返回这个结果。 示例1:输入:num=38输出:2解释:各位......
  • 力扣-2586. 统计范围内的元音字符串数
    1.题目题目地址(2586.统计范围内的元音字符串数-力扣(LeetCode))https://leetcode.cn/problems/count-the-number-of-vowel-strings-in-range/?envType=study-plan-v2&envId=primers-list题目描述给你一个下标从0开始的字符串数组words和两个整数:left和right。如果字......
  • 力扣-1422. 分割字符串的最大得分
    1.题目题目地址(1422.分割字符串的最大得分-力扣(LeetCode))https://leetcode.cn/problems/maximum-score-after-splitting-a-string/?envType=study-plan-v2&envId=primers-list题目描述给你一个由若干0和1组成的字符串s,请你计算并返回将该字符串分割成两个非空子......
  • 双向循环链表队列的接口设计
    /***************************************************filename:DoubleLinkQueue.c*author:[email protected]*date:2024/04/28*brief:构建双向循环链队的接口*note:None**CopyRight(c)[email protected]......
  • leetcode(力扣) 2866. 美丽塔 II
    原题链接暴力做法(时间复杂度O(n^2))每次选取下标i为峰值,进行n次,对每次取max就可以找打答案对于i左边的序列:需要满足序列是非递减的,同时每个值尽可能大所以满足:下标为j的位置上的数<=下标是(j,i]的最小的值(等于时取得最大值),同时需要保证j位......
  • 力扣-231. 2 的幂
    1.题目题目地址(231.2的幂-力扣(LeetCode))https://leetcode.cn/problems/power-of-two/?envType=study-plan-v2&envId=primers-list题目描述给你一个整数n,请你判断该整数是否是2的幂次方。如果是,返回true;否则,返回false。如果存在一个整数x使得 n==2x,则认为......