首页 > 其他分享 >移除链表元素(虚拟节点法、力扣203)

移除链表元素(虚拟节点法、力扣203)

时间:2024-04-09 15:58:33浏览次数:23  
标签:力扣 head ListNode val tempHead next 链表 移除 节点

题目

给你一个链表的头节点 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

题解思路如下:

如果不使用虚拟头节点时,那么删除头节点和删除后面的节点要分开判断并且操作.较为麻烦,所以我们之接new一个节点,并且让它指向头节点,当我们进行后续的删除操作就都是一样的了,需要注意的是,循环判断删除建议使用while,如果使用for这个循环条件有些难以把握。同时遍历判断的时候要建立一个零时指针来存放头结点的位置用它来遍历,防止虚拟头结点指向错误,最后返回时要记得释放内存,并且把虚拟头结点的下一个节点设置为头节点

具体代码如下:

       

class Solution {

public:

    ListNode* removeElements(ListNode* head, int val) {

        struct ListNode *virtualHead = new ListNode{ 0 };

        virtualHead->next = head;struct ListNode* tempHead = virtualHead;

        while (tempHead->next != NULL)

        {

            if (tempHead->next->val == val)

            {

                struct ListNode *temp=tempHead->next;

                tempHead->next = tempHead->next->next;

                delete temp;

            }

            else tempHead=tempHead->next;

        }

        head=virtualHead->next;

        delete virtualHead;

        return head;

    }

};

标签:力扣,head,ListNode,val,tempHead,next,链表,移除,节点
From: https://blog.csdn.net/Moapsw033/article/details/137395891

相关文章

  • 【C语言】链表(原理+实现)
    目录一.链表概念二.链表实现1.创建新节点2.打印链表3.尾插、头插4.尾删、头删5.查找6.指定位置前插入7.指定位置后插入8.指定位置删除9.指定位置后删除 10.销毁链表三.完整代码一.链表概念链表是线性表的一种,与顺序表不同的是,链表在物理存储结构上不连续,在......
  • 合并两个有序链表 - LeetCode 热题 27
    大家好!我是曾续缘......
  • 链表--移除链表元素--力扣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:输入:h......
  • 顺序表和链表
    目录1.线性表2.顺序表3.链表1.线性表线性表是n个具有相同特征的数据元素的有限序列。线性表是一种在实际中被广泛应用的数据结构,常见的线性表有:顺序表、链表、栈、队列、字符串…………线性表在逻辑上是线性结构,也就是一条连续的直线,但是在物理上并不一定是连续的,线......
  • 力扣经典150题第九题:跳跃游戏
    目录1.简介2.问题描述3.解题思路方法一:贪心算法4.算法实现方法一:贪心算法5.示例与测试6.总结与展望7.结语1.简介本篇博客将讨论力扣经典150题中的跳跃游戏问题。给定一个非负整数数组nums,数组中的每个元素代表在该位置可以跳跃的最大长度,判断是否能够从......
  • 力扣由浅至深 每日一题.21 只出现了一次的数字
    世界大雨滂沱,万物苟且而活               ——24.4.1只出现一次的数字给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。你必须设计并实现线性时间复杂度的算法来解决此......
  • Offer必备算法22_优先级队列_堆_四道力扣题详解(由易到难)
    目录①力扣1046.最后一块石头的重量解析代码②力扣703.数据流中的第K大元素解析代码③力扣692.前K个高频单词解析代码④力扣295.数据流的中位数解析代码本篇完。①力扣1046.最后一块石头的重量1046.最后一块石头的重量难度简单有一堆石头,每块石头的重......
  • 双数列-力扣-打家劫舍2
    一个专业的小偷,计划偷窃一个环形街道上沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。给定一个代表每......
  • 移除元素 -- 力扣第27题 -- 暴力、双指针解法
    题目https://leetcode.cn/problems/remove-element/description/给你一个数组nums 和一个值val,你需要原地移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用O(1)额外空间并原地修改输入数组。元素的顺序可以改变。你不需......
  • 【C/C++】循环链表实现约瑟夫问题
    #include<iostream>usingnamespacestd;typedefstructnode{intdata;node*next;node():data(0),next(nullptr){}node(intx):data(x),next(nullptr){}}node;//循环链表实现约瑟夫问题voidysflb(intn,intk){if(n<=0||k<=0){......