Java 实现单链表

文章目录

  • 节点类
  • 定义单链表类
  • 总结


在这里插入图片描述

单链表是一种常用的数据结构,它由若干个节点(Node)组成,每个节点包含两部分:一部分是数据域,用于存储数据;另一部分是指针域,用于指向下一个节点。。


节点类

定义的节点类:

public class HeroNode {public int no;public String name;public HeroNode next; //指向下一个节点public HeroNode(int no, String name, HeroNode next) {this.no = no;this.name = name;this.next = next;}@Overridepublic String toString() {return "HeroNode{" +"no=" + no +", name='" + name + '\'' +'}';}}

在这个代码中,HeroNode 类定义了三个实例变量:no 表示英雄编号,name 表示英雄姓名,next 表示指向下一个节点的引用。

构造方法用于初始化对象的属性,toString() 方法用于打印节点的信息。


定义单链表类

public class SingleLinkedList {/** 初始化头节点 不存放数据 只是一个标记 */private HeroNode head = new HeroNode(0, "", null);/** 插入节点 尾插法 */public void add(HeroNode newNode){if( newNode == null ){return;}HeroNode currentNode = head;while ( currentNode.next != null ) {currentNode = currentNode.next;}currentNode.next = newNode;}/** 修改节点 */public void update(HeroNode newNode){if( newNode == null ){return;}HeroNode currentNode = head.next;while ( currentNode != null ){if( currentNode.no == newNode.no ){currentNode.name = newNode.name;}currentNode = currentNode.next;}}/** 删除节点 */public void delNode(int no){HeroNode currentNode = head;while ( currentNode != null && currentNode.next != null ) {if( currentNode.next.no == no ){currentNode.next = currentNode.next.next;}currentNode = currentNode.next;}}/** 展示列表 */public void show(){HeroNode currentNode = head.next;while ( currentNode != null ) {System.out.println(currentNode);currentNode = currentNode.next;}}}

在 SingleLinkedList 类中实现了以下几个方法:

add(HeroNode newNode):在链表的尾部插入一个新节点。

update(HeroNode newNode):根据节点编号找到指定节点,并更新节点的姓名。

delNode(int no):根据节点编号找到指定节点的前一个节点,并将其 next 引用指向下一个节点,从而实现删除节点的功能。

show():遍历链表,并打印每个节点的信息。

这些方法都是单链表常见的操作,有几个小地方需要注意:

add(HeroNode newNode) 方法中,使用的是尾插法,即将新节点添加到链表的尾部。这是常用的插入方法之一,可以有效地保持链表的顺序性。

update(HeroNode newNode) 方法中,首先需要找到待修改的节点,然后更新其数据。这是正确的操作。但是,在找到节点后,没有中断循环,而是继续遍历链表直到结束,是因为考虑到链表中可以存在重复的节点。

delNode(int no) 方法中,首先需要找到待删除节点的前一个节点,然后将其 next 引用指向待删除节点的下一个节点。

show() 方法中,你首先将头节点赋给 currentNode,然后通过 currentNode.next 遍历链表。这样做是为了跳过头节点,只展示真实数据节点。这也是常见的展示列表的操作。


以上就是一个单链表的简单的实现。


总结

单链表的特点包括:

  • 链表中的节点是通过指针相连的,每个节点都指向下一个节点,最后一个节点指向空(null)。
  • 单链表可以动态地增加、删除节点,而不需要移动其他节点的位置。
  • 链表的插入和删除操作效率高,时间复杂度为 O(1)。
  • 链表的查找操作相对较慢,时间复杂度为 O(n),需要从头节点开始依次向后遍历。

单链表的优势在于可以方便地进行插入和删除操作,但其缺点是查找操作效率较低。在实际编程中,单链表常用于不需要频繁查找操作,但需要频繁插入和删除操作的场景中。

单链表是一种重要的数据结构,能够有效地解决一些特定的问题,例如处理动态数据或者构建一些数据结构。


在这里插入图片描述



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

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

相关文章

Mybatis实现映射,一次查询和嵌套查询

1.实现映射 Mybatis的最大魅力就在于它的语句映射。实现映射一般有一下三种方法: 当我们在数据库的列名和java中的属性名完全相同时,mybatis会自动映射并将查询结果封装。 对于由多个单词组成的名字时(例如studentgender)&…

时序预测 | Matlab基于灰色隐马尔可夫模型(HMMP-GM11)的时间序列预测

时序预测 | Matlab基于灰色隐马尔可夫模型(HMMP-GM11)的时间序列预测 目录 时序预测 | Matlab基于灰色隐马尔可夫模型(HMMP-GM11)的时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 灰色HMMP-GM11改进模型,通过引入隐马尔可夫模型(HMM)来对原始数据进行状态分…

单调栈练习(五)— 子数组的最小值之和

题目 同样的LeetCode原题:题目链接 给定一个整数数组 arr,找到 min(b) 的总和,其中 b 的范围为 arr 的每个(连续)子数组。 由于答案可能很大,因此 返回答案模 10^9 7 。 思路 暴力解 先来说暴力解的思路…

OpenssH 漏洞修复

文章目录 OpenSSH 漏洞修复需求:准备环境配置阿里云yum源关闭防火墙 && SELinux安装 telnet-server安装 zlib 软件包安装OpenssL安装 OpenssH报错信息 OpenSSH 漏洞修复 场景: CentOS Stream 9 系统ssh默认版本一般是OpenSSH_8.7p1 ,…

【国内访问github不稳定】可以尝试fastgithub解决这个问题

1、下载 https://github.com/dotnetcore/FastGithub https://github.com/dotnetcore/FastGithub/releases 官网下载即可,比如,我用的是这个:fastgithub_osx-x64.zip(点这里下载) 2、安装 如下图双击启动即可 3、…

科研绘图(二)气泡图

气泡矩阵图(Bubble Matrix Plot),通常用于显示三个变量之间的关系。这种图表类型将数据点表示为气泡的形式,其中气泡的大小通常表示第三个数值变量的大小。图表的X轴和Y轴代表两个分类或定量变量。颜色可能代表另一个分类变量或是…

CAN总线通信详解 (超详细配34张高清图)

CAN总线通信详解 (超详细配34张高清图) 1. CAN总线历史 CAN 是 Controller Area Network 的缩写(以下称为 CAN),是 ISO国际标准化的串行通信协议。 在当前的汽车产业中,出于对安全性、舒适性、方便性、低公害、低成本的要求&#…

Python爬虫---scrapy shell 调试

Scrapy shell是Scrapy提供的一个交互式shell工具,它可以帮助我们进行爬虫的开发和调试。可以使用它来测试xpath或css表达式,查看它们是如何工作的,以及它们从你试图抓取的网页中提取的数据。它允许你在编写spider时交互地测试表达式&#xff…

ipad协议滑块讲解-3(2000038登录滑块)

请使用python进行编译失调,切勿用于非法用途!! 创建main.js脚本 代码如下 const {VM,VMScript} require("vm2"); const fs require("fs"); const {read} require("./env/main"); const {readJsCode} re…

图像异或加密及唯密文攻击

异或加密 第一种加密方式为异或加密,异或加密的原理是利用异或的可逆性质,原始图像的像素八位bit分别与伪随机二进制序列异或,得到的图像就为加密图像。如下图对lena图像进行加密。 伪随机序列为一系列二进制代码,它受加密秘钥控…

【重点!!!】【DP】354. 俄罗斯套娃信封问题

题目 法1&#xff1a;DP&#xff0c;LIS问题 基本方法&#xff0c;必须掌握&#xff01;&#xff01;&#xff01; class Solution {public int maxEnvelopes(int[][] envelopes) {int n envelopes.length;if (n < 2) {return n;}Arrays.sort(envelopes, (a1, a2) ->…

php文件实战分析

1.php文件分析如下 这段代码是一个简单的 PHP 文件上传处理脚本。让我来为你进行分析&#xff1a; 首先&#xff0c;通过检查 $_FILES["file"]["error"] 的值来确定是否发生了错误。如果 $_FILES["file"]["error"] 大于 0&#xff0c…

CSS样式学习

html超文本传输标签&#xff0c;属性等权重 outline 标签轮廓 <input type"text"> <textarea cols"30" rows"10"></textarea> outline: none; 表示无轮廓 &#xff08;开发时用的比较多&#xff09; CSS 轮廓&#xff…

数据结构入门到入土——栈(Stack)和队列(Queue)

目录 一&#xff0c;栈&#xff08;Stack&#xff09; 1.1 概念 1.2 栈的使用 1.3 栈的模拟实现 1.4 栈的应用场景 1.5 栈&#xff0c;虚拟机栈&#xff0c;栈帧有什么区别&#xff1f; 二&#xff0c;队列&#xff08;Queue&#xff09; 2.1 概念 2.2 队列的使用 2.3 …

H3C在交换机上查找一个IP

一、案例背景&#xff1a; 一台wifi&#xff0c;在防火墙上有此IP的安全告警&#xff0c;需要查找到这个端口&#xff0c;并改到其他的隔离网段上网 二、排查过程&#xff1a; 自上向下查&#xff1a;在汇聚交换机上ping了一下&#xff0c;通的&#xff0c;然后查了下mac&…

前端js调用Lodop实现云打印

一、下载Lodop控件 官网&#xff1a;下载中心 - Lodop和C-Lodop官网主站 二、解压后安装 双击进行安装&#xff0c;里面有些页面文件是一些教程案例 勾选云服务工作模式 安装成功会自动启动 浏览器访问地址&#xff1a;http://localhost:8000/ 首页最下面有个教程案例跳转地址&…

DNS 域名解析

一 、名字解析介绍和DNS 当前TCP/IP网络中的设备之间进行通信&#xff0c;是利用和依赖于IP地址实现的。但数字形式的IP地址是很难记忆的。当网络设备众多&#xff0c;想要记住每个设备的IP地址&#xff0c;可以说是"不可能完成的任务"。那么如何解决这一难题呢&…

独孤思维:​凌驾于所有赚钱项目的副业

01 混群&#xff0c;尤其是混付费群。 在群里不要爆fen&#xff0c;不要广告。 真诚分享你的副业心得&#xff0c;经验&#xff0c; 自然能吸引到别人&#xff0c;主动加你。 这样&#xff0c;你就多了一个精准获客的方法。 02 不要在乎眼前的成绩。 没有意义。 独孤写…

蓝桥杯单片机进阶教程4——需要分配进程的模块

前言&#xff1a; 【蓝桥杯单片机保姆级教学】 https://www.bilibili.com/video/BV1h3411m7Aw/?p117&share_sourcecopy_web&vd_sourcec4fc67867c5218768e783d04475bc5a2 P117-118 比赛的时候也按照这个顺序来写 一、数码管显示 分析考题 &#xff08;1&#xff09;…

Go语言的内存分配器

1. 内存分配器的历史 Go语言的第一个内存分配器是简单的伙伴分配器。伙伴分配器是一种经典的内存分配器&#xff0c;它将堆内存划分为多个大小相同的块&#xff0c;并使用一种递归的算法来分配和释放内存块。伙伴分配器简单高效&#xff0c;但它存在一个问题&#xff1a;当分配…