203. 移除链表元素

news2024/9/29 9:58:01

203. 移除链表元素

  • 题目
  • 方法1递归
  • 方法2迭代

题目

给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。
请添加图片描述

方法1递归

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;
    }
};

removeElements(head->next, val) 这个操作会删除链表 head 中所有与给定值 val 相等的节点。但是没有判断头节点
每次传入的参数 head->next 都是链表中当前节点的下一个节点。这个操作会不断地遍历链表,直到最后一个节点。在遍历的过程中,如果发现当前节点的值等于 val,那么就将当前节点删除。

通过递归调用,我们可以不断地在链表中搜索并删除符合条件的节点。最终,整个链表会被遍历一遍,并且所有与 val 相等的节点都会被删除。
return head->val == val ? head->next : head;这行判断了头节点的值有没有和val相等

方法2迭代

class Solution {
public:
    ListNode* removeElements(ListNode* head, int val) {
        struct ListNode* dummyHead = new ListNode(0, head);
        struct ListNode* temp = dummyHead;
        while (temp->next != NULL) {
            if (temp->next->val == val) {
                temp->next = temp->next->next;
            } else {
                temp = temp->next;
            }
        }
        return dummyHead->next;
    }
};

struct ListNode* dummyHead = new ListNode(0, head);
ListNode结构体:这是一个链表节点的自定义结构体。它包含两个成员变量:一个是存储节点值的val,另一个是指向下一个节点的指针next。
temp->next = temp->next->next;删除下一个节点

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/837420.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IO进程线程day7(2023.8.4)

一、Xmind整理: 二、课上练习: 练习1:创建两个线程:其中一个线程拷贝前半部分,另一个线程拷贝后半部分。 只允许开一份资源,且用互斥锁方式实现。 提示:找临界区--->找临界资源。 #includ…

关于compose AndroidView更新及生命周期的监听。

有时候需要在compose中使用原生view体系,那么将会用到AndroidView这个控件。 从源码中可以看出有三个参数,factory就是要添加的view控件,在update中对控件进行更新。 以添加地图为例: 对地图进行更新及对生命周期的监听&#xff1…

探索Android应用架构模式:选择适合你的开发之路

探索Android应用架构模式:选择适合你的开发之路 通过这篇文章,读者将能够更好地理解不同的Android应用架构模式,为他们的项目选择最适合的架构模式,并在开发过程中更高效地构建稳健的应用程序。 引言 在今天的移动应用开发领域…

MongoDB 6.0.8 安装配置

一、前言 MongoDB是一个基于分布式文件存储的数据库。由C语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。在高负载的情况下,添加更多的节点,可以保证服务器性能。 MongoDB 将数据存储为一个文档,数据结构由键值(key>value…

vue-cli3项目优化

首先添加两个量化的插件,方便对项目目前的情况进行分析: 1.添加speed-measure-webpack-plugin插件 —量化的指标可以看出前后对比 使用步骤: 安装speed-measure-webpack-plugin依赖 npm install speed-measure-webpack-plugin -D配置vue.c…

React安装ant design组件库,并使用

ant design是一个很棒的组件库,官方地址:快速上手 - Ant Design 但是如何在React里面用起来,好像并不是很顺畅,没有像Vue里面那么友好,因为我踩过这个坑,虽然安装很简单,但是想要出样式&#x…

【Spring】Spring中的设计模式

文章目录 责任链模式工厂模式适配器模式代理模式模版方法观察者模式构造器模式 责任链模式 Spring中的Aop的通知调用会使用责任链模式责任链模式介绍 角色:抽象处理者(Handler)具体处理者(ConcreteHandler1)客户类角…

ARM裸机-13(SDRAM和重定位relocate)

1、汇编写启动代码之关看门狗 1.1、什么是看门狗 看门狗(watch dog timer,看门狗定时器)。大家想象这样一个场景:家门口有一只狗,这个狗定时会饿(例如说2小时一饿),够饿了会胡乱咬死人。人进进出出要想保证安全必须提前喂狗(必须在上次喂过后…

【夜深人静学习数据结构与算法 | 第十二篇】动态规划——背包问题

目录 前言: 01背包问题: 二维数组思路: 一维数组思路: 总结: 前言: 在前面我们学习动态规划理论知识的时候,我就讲过要介绍一下背包问题,那么今天我们就来讲解一下背包问题。 在这…

linux下性能分析工具Perf安装与用法

目录 1、Perf介绍 2、火焰图分类 (1)CPU (2)Memory Flame Graphs (3)Off-CPU Flame Graphs (4)Hot/Cold Flame Graphs (5)Differential 3、火焰图安装命令 …

【项目 线程 1】 3.1线程概述 3.2创建线程 3.3终止线程 3.4连接已终止的线程

文章目录 3.1线程概述线程概述线程和进程区别线程和进程虚拟地址空间线程之间共享和非共享资源NPTL 3.2 创建线程线程操作创建线程出现报错及原因 3.3终止线程3.4连接已终止的线程 3.1线程概述 线程概述 并发:两队人用同一个咖啡机(本质上同一时刻只有…

算法竞赛入门【码蹄集新手村600题】(MT1100-1120)C语言

算法竞赛入门【码蹄集新手村600题】(MT1100-1120)C语言 目录MT1101 带参数的宏IIMT1102 长方体MT1103 球体积MT1104 三角形MT1105 英寸英尺英里MT1106 盎司磅MT1107 加仑/升MT1108 保留小数MT1109 和10相比MT1110 最小值MT1111 最大值MT1112 中庸之道MT1113 三人同行…

这可是全网最全的网络工程师零基础实战视频整理,最新版分享

互联网中每一项傍身的技能都是需要从如何入门开始的,网络技术也是如此! 网络技术区别其他互联网技能的一点是学习需要从设备开始,只有认识了解了路由器、交换机、防火墙这些网络设备,才开始从网络通信原理开始,这使得网…

数据安全与可追溯:PDM系统的信息保护锦囊

在当今数字化时代,数据安全与可追溯是企业管理中至关重要的环节。PDM系统(Product Data Management,产品数据管理)作为一款强大的数字化工具,为企业提供了全方位的信息保护锦囊。让我们一同深入探讨,看看PD…

k8s手动发布镜像的方法

kubectl edit deploy编辑对应的文件,并:wq!保存即可

STL C++学习背景

STL C学习背景 背景知识 背景知识 STL前置知识 STL,英文全称 standard template library,中文可译为标准模板库或者泛型库,其包含有大量的模板类和模板函数,是 C 提供的一个基础模板的集合,用于完成诸如输入/输出、数…

2023新款MacBook Pro 14效果如何

新款MacBook Pro 14 显示屏背面依然保持着苹果LOGO,而且比Air大一圈,看来贵是有道理的,LOGO都变大了!该机配件是一个67W的充电头,以及MagSafe 3的充电线。而机身金属感十足,上手体验,确实有万元…

Java阶段五Day21

Java阶段五Day21 文章目录 Java阶段五Day21问题解析rocketmq清空数据 linux学习背景什么是linux系统虚拟机介绍启动 虚拟机linux虚拟机网络的问题 linux系统的基础命令命令提示符命令格式pwd指令ls指令cd指令mkdirtouch指令cp指令rm指令mv指令cat指令tail指令 文本编辑器vim操作…

代码随想录算法训练营第八天| 28.找到字符串中第一个匹配项的下标,459.重复的子字符串(二刷三刷)

28. 找出字符串中第一个匹配项的下标 28.找到字符串中第一个匹配项的下标 KMP算法 原串:sadbutsad 匹配串:sad 构造next数组其实就是计算模式串s的前缀表的过程。与原串是无关的 关于最长公共前缀和最长公共后缀: 前缀是指不包含最后一…

cmake配置Qt工程

cmake 工程配置 # 指定版本和项目 cmake_minimum_required(VERSION 3.10) set(TARGET_NAME labelDeviceView) project(${TARGET_NAME} ) include(${CMAKE_CURRENT_LIST_DIR}/../../../../../../ossLib/ossLib/env.cmake) set(CMAKE_PREFIX_PATH "D:/Qt6/6.5.2/msvc2019…