Java移除链表元素

news2024/9/26 5:24:45

目录

1.题目描述

2.题解

题解1

题解2


1.题目描述

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

示例

输入:head = [1,2,6,3,4,5,6],val = 6

输出:[1,2,3,4,5]

输入:head = [], val = 1
输出:[]

输入:head = [7,7,7,7], val = 7
输出:[]

2.题解

题解1

思路分析:创建新的链表,将链表中值不为val的节点尾插到新的节点中。

利用cur遍历原来链表,tail遍历新的链表,若cur的值不为val,则将cur赋值给tail,cur向后移动,若cur的值为val,则跳过该节点。

//创建新链表
ListNode newHead = null;
ListNode cur = head;
ListNode tail = null;
    while(cur != null){
    if(cur.val != val) {
        //第一次插入
        if (tail == null) {
            newHead = tail = cur;
        } else {
            tail.next = cur;
            tail = cur;
        }
    }
    cur = cur.next;
}

由于tail的值可能不为空,此时我们需要将新链表的尾部置空

//尾部置空
if(tail != null){
    tail.next = null;
}

完整代码

class Solution {
    public ListNode removeElements(ListNode head, int val) {
        //若链表为空,则直接返回null
        if(head == null){
            return null;
        }
        //创建新链表
        ListNode newHead = null;
        ListNode cur = head;
        ListNode tail = null;
        while(cur != null){
            if(cur.val != val) {
                //第一次插入
                if (tail == null) {
                    newHead = tail = cur;
                } else {
                    tail.next = cur;
                    tail = cur;
                }
            }
            cur = cur.next;
        }
        //尾部置空
        if(tail != null){
            tail.next = null;
        }
        return newHead;
    }
}

题解2

思路分析:要想删除链表中的元素,首先要找到值为val的节点node,将node的上一节点指向node的下一节点,即可删除值为val的节点,注意考虑头节点为val的情况,要删除链表中所有值为val的节点,利用while循环即可实现。

由于链表为单链表,因此需要保存值为val节点node的上一个节点,可以创建prev和cur,cur指向当前节点,prev指向当前节点的上一节点,也可以通过cur.next.val找到值为val的节点

ListNode cur = head;
while(cur.next != null){
    if(cur.next.val == val){
        cur.next = cur.next.next;
    }else{
        cur = cur.next;
    }
}

当头节点的值也为val时,则需单独删除头节点

if(head.val == val){
    head = head.next;
}

完整代码

class Solution {
    public ListNode removeElements(ListNode head, int val) {
        //若链表为空,则直接返回null
        if(head == null){
            return null;
        }
        ListNode cur = head;
        while(cur.next != null){
            if(cur.next.val == val){
                cur.next = cur.next.next;
            }else{
                cur = cur.next;
            }
        }
        //单独考虑头节点的值是否等于val
        if(head.val == val){
            head = head.next;
        }
        return head;
    }
}

题目来源:

203. 移除链表元素 - 力扣(LeetCode)

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

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

相关文章

饥饿游戏搜索算法(HGS)(含java实现代码)

Hunger games search: Visions, conception, implementation, deep analysis, perspectives, and towards performance shifts 期刊:Expert Systems With Applications SCI1区 主体框架 public HGS(){initialize();calculateFitness();sortTheFitness();calculateHungry();for…

分享团队在软件开发中用到的神仙工具

目前使用的是JNPF框架。 技术栈上使用的SpringBoot、SpringCloud、Spring Web、MyBatis、Swagger、Vue、Element。 这些都是比较主流的技术,无论是技术层面的先进性还是学习难度都是比较低的,目前网络上有大量可供参考学习的资料。 并且它支持前后端分离…

中文转拼音(带音调)

导入maven依赖 <!--导入pinyin4j库--><dependency><groupId>com.belerweb</groupId><artifactId>pinyin4j</artifactId><version>2.5.1</version></dependency>demo如下&#xff1a; import com.github.stuxuhai.jpiny…

方案:数智化视频AI技术为智慧防汛筑基,构建防汛“数字堤坝”

一、背景分析 在过去的几年中&#xff0c;全球气候变化导致许多城市在雨季面临严重的洪涝灾害。这些灾害不仅对人们的生命安全和财产造成威胁&#xff0c;也影响了城市的正常运转。传统的防汛手段主要依赖人力监控和应急指挥&#xff0c;但存在响应速度慢、处理效率低等问题。…

【操作系统】进程控制与进程通信

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; c语言 数据结构 javaEE 操作系统 Redis 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 操作系统 一、进程控制1.1 什么是进程控制1…

vue element 搜索框根据后台的接口实现模糊查询 + 分页特殊处理+重置表格

模糊查询效果图 1.配置接口 search: "/api/goods/search", //搜索接口/goods/search 2.get接口 search(params) { return axios.get(base.search, { params });//后台传参 再写这个params }, 3.异步请求接口 // 搜索接口async search(search){let res await this…

基于Java社区生鲜电商平台设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

离子风刀的特点以及应用领域

静电消除器离子风刀是一种用于消除静电的设备&#xff0c;它通过在空气中产生离子&#xff0c;将静电从物体表面或人体上释放掉&#xff0c;以保护电子设备和人体免受静电的损害。 离子风刀的特点包括&#xff1a; 1、高效&#xff1a;离子风刀能够快速消除静电&#xff0c;提…

CRM软件系统趣味性——游戏化销售管理

对于企业销售来说&#xff0c;高薪酬也伴随着更高的压力与挑战。高强度的单一工作会让销售人员逐渐失去对工作的兴趣&#xff0c;导致售状态缺少动力和激情&#xff0c;工作开展愈加困难。您可以通过CRM系统进行游戏化销售管理&#xff0c;让销售人员重新干劲满满。 游戏并不是…

SkyWalking使用讲解

文章目录 1 SkyWalking1.1 简介1.2 如何选择1.3 Skywalking架构1.4 服务端搭建1.4.1 下载安装包1.4.2 配置修改1.4.2.1 config/application.yml1.4.2.2 webapp/webapp.yml 1.4.3 启动服务 1.5 客户端搭建1.6 数据持久化1.6.1 修改配置文件1.6.2 添加MySQL的jdbc依赖 1.7 日志监…

Java面经整理(1)

一)Java中支持多继承吗,为什么? 答案:在JAVA中是不支持多继承的,原因是多继承会存在菱形继承的问题 菱形继承: 1)菱形继承也被称之为是钻石继承,是一种在JAVA面向对象编程的时候遇到的一个可能出现的继承问题; 2)假设JAVA支持多继承,那么就有可能一个类D继承两个不同的类…

一文总结提示工程框架,除了CoT还有ToT、GoT、AoT、SoT、PoT

夕小瑶科技说 原创 编译 | 谢年年 大语言模型LLM被视为一个巨大的知识库&#xff0c;它可以根据你提出问题或陈述的方式来提供答案。就像人类可能会根据问题的不同提供不同的答案一样&#xff0c;LLM也可以根据输入的不同给出不同的答案。因此&#xff0c;你的问题或陈述方式就…

视频太大怎么压缩变小?把视频变小这样做

随着科技的不断发展&#xff0c;视频已经成为了我们日常生活中不可或缺的一部分&#xff0c;然而&#xff0c;有时候我们会遇到视频体积太大&#xff0c;无法上传或者传输的问题&#xff0c;那么&#xff0c;如何将过大的视频压缩变小呢&#xff1f;下面就给大家分享几个方法&a…

如何检测出鸡蛋壳上的裂缝(个人想法,正确性有待研究)

问题 老师在课上提出了一个项目&#xff0c;是关于如何通过某些方式来找出有裂缝的鸡蛋壳&#xff0c;但是鸡蛋壳上的裂缝非常小&#xff0c;问有什么办法处理。 想法 通过瞬间增大气压使得有裂缝的鸡蛋破裂。 具体实施 在图中&#xff0c;我们可以看到鸡蛋受外界气压的力&…

TS自动监视ts文件修改

当我们对ts文件进行编译后会生成js文件 当我们在ts文件中进行修改时&#xff0c;js文件并不会进行变化 那我们该如何监视ts文件中的变化呢&#xff1f;可以在控制台中输入如下命令&#xff1a; tsc 文件名.ts -w 这下在ts中代码改变就可以被监听&#xff08;这里报错是因为同时…

【UML】类图详解

UML UML ——Unified modeling language UML&#xff08;统一建模语言&#xff09;&#xff0c;是一种用于软件系统分析和设计的语言工具&#xff0c;它用
于帮助软件开发人员进行思考和记录思路的结果 UML图有哪些 用例图静态结构图∶类图、对象图、包图、组件图、部署图动…

Python 搭建编程环境

一、搭建编程环境 1、下载python 官网&#xff1a;https://www.python.org 2、开始安装 下载安装版本&#xff0c;双击下载的安装包&#xff0c;如下&#xff1a; 步骤一&#xff1a; 步骤二&#xff1a; 步骤三&#xff1a; 安装完成后执行下面的操作&#xff0c;判断是否…

[移动通讯]【Carrier Aggregation-4】【LTE-5】

前言&#xff1a; 前面讲过通过能力上报&#xff0c;以及RRC Connection Reconfiguration 添加SCell,添加完成后&#xff0c;UE 处于Inactive 状态。 本章主要讨论一下 Inactive 状态Active 状态的切换. 3GPP TS 36.321 V11.1.0 section 6.1.3.8 "Activation/Deactivat…

使用Python抢购商品

使用Python抢购商品 前言准备工作安装selenium库下载ChromeDriver 编写抢购商品py脚本导入库selenium使用方法 示例代码淘宝网华为商城 前言 注意&#xff1a;示例代码仅供学习使用&#xff0c;禁止不正当盈利。 本文使用Python的selenium库通过Chrome浏览器来抢购商品。首先…

Vue3-初识Vue3、创建Vue3工程、vue3组合式API(setup、ref函数、reactive函数)、响应式原理、计算属性、监视属性

Vue3&#xff08;1&#xff09; 目录 Vue3&#xff08;1&#xff09;一、Vue3简介二、创建Vue3.0工程1、使用vue-cli创建2、使用vite创建 三、常用的Composition API&#xff08;组合式API&#xff09;1、拉开序幕的setup2、ref函数3、reactive函数4、Vue3中响应式原理&#xf…