java 实现删除单链表中所有指定的结点以及如何清空单链表

news2025/2/21 23:51:38

文章目录

  • 1. 删除单链表中的所有的指定结点
    • 1.1 删除思路
    • 1.2 删除步骤
      • 1.2.1 删除结点不是头结点
      • 1.2.2 删除的结点是头结点的情况
    • 1.3 部分代码思路分析
    • 1.4 整体代码演示
  • 2. 清空单链表

1. 删除单链表中的所有的指定结点

1.1 删除思路

  • 定义一个 cur 来代替 head 遍历单链表。
  • 遇到指定结点就开始删除。
  • 是不是要删除的结点, cur 都指向下一个结点,直到表遍历完成。
  • 单链表中可能没有要删除的结点。
  • 定义一个 prev 指向要删除结点的前驱。
  • 如果单链表的第一个结点就是要删除的结点,直接将这个结点指向后驱。

1.2 删除步骤

1.2.1 删除结点不是头结点

  1. 定义 cur 从表的第二个结点开始遍历。
    定义 prev 从表的 cur 的前驱位置开始遍历。

    比较此时 cur 指向结点的值是不是要删除结点的值。
    是就改指向删除,不是就 cur 往后面找。

  2. 现在要删除的是,值是2的结点。
    cur 此时指向了要删除的结点,进行改指向删除。

    可以看到第一个节点直接指向了第三个节点。

  3. cur 指向下一个,prev 指向 cur 的前驱。

    第一个节点存的是第三个节点的地址,也就与第二个结点断开了。
    prev 此时不需要移动即是 cur 的前驱。
    比较此时 cur 指向结点的值是不是要删除结点的值。
    是就改指向删除,不是就 cur 往后面找。

  4. 比较此时 cur 指向结点的值是不是要删除结点的。

    此时的第一个结点的地址域存的是最后一个结点的地址,也就指向了它。

  5. cur 往后走,prev 指向cur的前驱。

    此时 cur 指向结点的值不是要删除的结点,cur指向下一个结点。

    此时 cur 为空 遍历结束,跳出循环。所有的要删除的结点都已删除完毕。

1.2.2 删除的结点是头结点的情况

如果头结点是要删除的结点,若按照上面的方法删除;
遍历结束后,头结点是未删除的。


可以看到此时 cur 为空了,但是还有一个结点未删除。


解决办法:

判断一下头结点是不是要删除的结点。

判断方法:

  • 将头节点与要删除的结点的值比较,看看是不是相等。
  • 如果使得话,就直接将头结点指向它的后区即可。

删除后:

1.3 部分代码思路分析

  1. 如果表是空的直接返回
 //链表中可能是空的
 if(this.head == null) {
     return;
 }
  1. 定义cur 和 prev
  ListNode cur = this.head.next;//cur指向要删除的结点
  ListNode prev = this.head;//prev指向要删除结点的前驱
  1. 该结点指向代码
prev.next = cur.next;//要删除结点的前驱的地址域指向key结点的后驱的地址域
cur = cur.next;//要删除的结点指向它的后驱
  1. 判断头结点是不是要删除的结点的代码
if (this.head.value == key) {
    this.head = this.head.next;//将这个头结点指向它的后驱 - 然后就删除了
}

1.4 整体代码演示

//删除所有key的结点
public void removeAllKey(int key) {
    //链表中可能是空的
    if(this.head == null) {
        return;
    }

    ListNode cur = this.head.next;//cur指向要删除的结点
    ListNode prev = this.head;//prev指向要删除结点的前驱
    //cur不等于空则说明cur未找到尾结点,移动要继续
    while (cur != null) {
       //如果当前的cur指向的数据是我要找的key
       if (cur.value == key) {
           //改变指向删除
           prev.next = cur.next;//要删除结点的前驱的地址域指向key结点的后驱的地址域
           cur = cur.next;//要删除的结点指向它的后驱
       }else{ //若不是要找的 - 跳到下一个结点
           prev = cur;//当前cur结点的前驱指向cur指向的结点
           cur = cur.next;//当前cur结点指向它的后驱
       }
   }
   //如果链表的第一个结点是key
   if (this.head.value == key) {
       this.head = this.head.next;//将这个头结点指向它的后驱 - 然后就删除了
   }
}

2. 清空单链表

释放单链表中每一个结点的对象,直接置为空即可。

代码演示:

public void clear() {
   this.head = null;//将的结点置为空
}

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

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

相关文章

Python检测和防御DOS攻击

目录 ​编辑 一、在CentOS上安装Python3 1.下载Python3.10源代码文件 2.运行以下命令行完成安装 3.确认是否安装成功 二、理解各个命令的含义 1.uptime 2.netstat 3.ss 4.firewall-cmd 5.sysctl 三、利用Python实现DDOS入侵检测 1.采集TCP连接数据 一、在CentOS上安…

生态系统服务——水源涵养水源涵养分布

水源涵养,是指养护水资源的举措。一般可以通过恢复植被、建设水源涵养区达到控制土壤沙化、降低水土流失的目的。 水源涵养数据是地理遥感生态网平台通过水量平衡方程(The Water Balance Equation)计算(式29)。水量平衡…

http://localhost:8080打不开/shutup.bat命令行闪退

前言:学过一阵java web后从头学起,发现http://localhost:8080打不开,双击shutup.bat闪退 http://localhost:8080打不开 一、tomcat 未启动,所以http://localhost:8080打不开; 二、tomcat图标显示已启动,但…

计算机毕业设计SSM草海帮帮帮【附源码数据库】

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

5G无线技术基础自学系列 | 无线帧结构

素材来源:《5G无线网络优化实践》 一边学习一边整理内容,并与大家分享,侵权即删,谢谢支持! 附上汇总贴:5G无线技术基础自学系列 | 汇总_COCOgsta的博客-CSDN博客 1.3.1 基本时间单位 NR物理层的基本时间…

R语言绘制瑞利分布和指数分布,并为瑞利分布着不同色

从概率论和统计学角度看,Weibull Distribution是连续性的概率分布,其概率密度为: 其中,x是随机变量,λ>0是比例参数(scale parameter),k>0是形状参数(shape para…

python sympy求多元函数的梯度、Hessian矩阵

1 求梯度 sympy实际上提供了求梯度的方法,但个人认为不是很直观,求出的是∂f∂xi⃗∂f∂yj⃗∂f∂zk⃗\frac{\partial f}{\partial x} \vec {i}\frac{\partial f}{\partial y} \vec {j}\frac{\partial f}{\partial z}\vec {k}∂x∂f​i∂y∂f​j​∂z∂…

java计算机毕业设计springboot+vue股票交易模拟系统

项目介绍 股票交易模拟系统是针对目前股票交易模拟管理的实际需求,从实际工作出发,对过去的股票交易模拟管理系统存在的问题进行分析,完善客户的使用体会。采用计算机系统来管理信息,取代人工管理模式,查询便利&#…

eCal 基础安装和使用

参考文章: 自动驾驶通信中间件ecal源码分析—1. 什么是ecal 1、安装 使用官网提供的指令安装 主要参考官网进行安装, https://eclipse-ecal.github.io/ecal/index.html 主要这里兼容的主要系统: Ubuntu 18.04 Ubuntu 20.04 Ubuntu 22.04 这…

[附源码]java毕业设计8号体育用品销售及转卖系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

搜索服从幂律分布的网络 论文阅读

一、定义 1、幂律分布网络定义: 大部分通信网络和社会网络都具有幂律分布的特点,也即度数高的节点的数量少,度数低节点的数量多。 2、数学推导: 对于指数为τ、最小度数为k 1、在mkmaxm k_{max}mkmax​处有突变截止点的幂律分…

LeetCode链表练习(上)

文章目录前言1.反转链表1.题目分析2.代码示例2.力扣203. 移除链表元素1.题目分析2.代码示例3.力扣876. 链表的中间结点1.题目分析2.代码示例4.链表倒数第k个节点1.题目分析2.代码示例5.总结前言 之前介绍了链表的实现,为了更好巩固所学的知识,刷题是很有…

【路径规划】局部路径规划算法——DWA算法(动态窗口法)|(含python实现)

文章目录参考资料1. DWA算法原理1.1 简介1.2 算法原理1. 速度采样2. 轨迹预测(轨迹推算)3. 轨迹评价2. Python实现2.1 参数配置2.2 机器人运动学模型2.3 DWA算法类实现2.4 画图2.5 主函数3. 总结参考资料 The Dynamic Window Approach to Collision Avo…

二分查找的模板

这篇博客的二分用的都是左闭右闭的区间&#xff0c;对于二分来说还是我还是习惯这样写 最传统的二分查找&#xff0c;用左闭右闭写 int search(vector<int>& nums, int target) {int left 0;int right nums.size() - 1; // 定义target在左闭右闭的区间里&#xff0…

Mybatis学习之动态Sql

目录 1. 什么是动态Sql 2. 动态Sql需要学习什么 3. 动态Sql之《if》 4. 动态Sql之《where》 5. 动态Sql之《foreach》 6. 动态Sql之《sql》 7. PageHelper分页插件的使用 1. 什么是动态Sql 答案&#xff1a;动态Sql指的是&#xff0c;Sql语句是变化的&#xff0c;不是固…

Allegro原理图反标教程

Allegro原理图反标教程 Logic→Auto Rename Refdes→Rename 点击More进行详细设置 按照下图设置 点击Rename 打开刚刚rename时生成的rename.log文件,需要提取一些数据,如下图 将上图所有带有OLD和NEW的行提取出来,再将OLD,NEW删除 打开Capture,点击Tools→Back Annota…

C++中运行一个程序的内存分配情况及qt中的内存管理机制

一个由c/C编译的程序占用的内存分为以下几个部分 1、栈区&#xff08;stack&#xff09;— 由编译器自动分配释放 &#xff0c;存放函数的参数值&#xff0c;局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区&#xff08;heap&#xff09; — 一般由程序员分配释放&a…

【springboot】你了解@Autowired 和 @Resource吗?@Autowired 和 @Resource深入分析

Autowired 和 Resource深入分析“认祖归宗”--Autowired 和 Resource来源“通过现象看本质”--Autowired 和 Resource作用和区别1.现象一&#xff1a;一个业务接口只对应一个业务实现类2.现象二&#xff1a;一个业务接口 对应 两个或多个业务实现类我们在开发中&#xff0c;一直…

【数据结构】链表其实并不难 —— 手把手带你实现双向链表

文章目录0. 前言1. 双向链表的概念2. 双向链表的实现2.1 结构设计2.2 接口总览2.3 初始化2.4 创建新节点2.5 尾插2.6 头插2.7 尾删2.8 头删2.9 查找2.10 在pos位置之前插入2.11 在pos位置删除2.12 打印2.13 销毁3. 完整代码List.hList.ctest.c4. 结语0. 前言 之前&#xff0c;…

【Python百日进阶-WEB开发】Day175 - Django案例:07状态保持

文章目录五、状态保持5.1 Django中状态保持5.1.1 状态保持概述5.1.2 Cookie5.1.2.1 Cookie的用处&#xff1a;5.1.2.1 Cookie的特点&#xff1a;5.1.2.1 Cookie的操作&#xff1a;5.1.3 session5.1.3.1 Session的特点&#xff1a;5.1.3.2 Session依赖于Cookie5.1.3.3 存储方式5…