数据结构单链表SingleLinkedList,Java实现单链表增删改查

文章目录

    • 链表介绍
    • 应用示例


链表介绍

链表是有序的列表,但是它在内存中是存储是不连续的,如下:

在这里插入图片描述

链表是以节点的方式来存储,是链式存储:
①每个节点包含data域存储数据,next域指向下一个节点
②链表的各个节点不一定是连续存储
③链表分带头节点的链表和没有头节点的链表,根据实际的需求来确定

单链表(带头结点)逻辑结构示意图如下:
在这里插入图片描述


应用示例

使用带head头的单向链表实现水浒英雄排行榜管理完成对英雄人物的增删改查操作。

①节点类

//定义HeroNode,每个HeroNode就是一个链表节点
class HeroNode {//data域public int no; //编号排名public String name; //名字public String nikeName; //昵称//next域public HeroNode next;//构造器public HeroNode(int no, String name, String nikeName) {this.no = no;this.name = name;this.nikeName = nikeName;}//toString方法@Overridepublic String toString() {return "HeroNode{" +"no=" + no +", name='" + name + '\'' +", nikeName='" + nikeName + '\'' +'}';}
}

②链表类

//定义SingleLinkedList管理英雄人物,相当于是链表
class SingleLinkedList {//先初始化一个头节点,不存放具体数据,注意头节点保持不动,后面不能直接操作它private HeroNode head = new HeroNode(0,null,null);//添加链表节点//1、不考虑编号排名(找到最后一个节点,使得最后一个节点的next指向新的节点)public void add1(HeroNode heroNode){//因为头节点不能动,因此要一个辅助变量tempHeroNode temp = head;//遍历找到最后while (true){if (temp.next == null){break;}temp = temp.next;}//当退出while就意味着找到最后一个节点了temp.next = heroNode;}//2、考虑编号排名(根据排名编号从小到大,若已存在则添加失败)public void add2(HeroNode heroNode){//因为头节点不能动,因此要一个辅助变量temp//因为是单链表,temp位于添加位置的前一个节点,否则插入不了HeroNode temp = head;boolean flag = false; //用来标记排名编号是否存在,默认不存在while (true){if (temp.next == null){ //说明temp已经在最后,直接添加break;}if (temp.next.no > heroNode.no){ //位置找到了,temp即在heroNode前break;}if (temp.next.no == heroNode.no){ //该排名编号已经存在flag = true;break;}temp = temp.next; //后移遍历}if (flag){System.out.printf("编号%d已经存在,添加失败!\n",heroNode.no);}else {//将heroNode添加进链表,在temp后一个heroNode.next = temp.next;temp.next = heroNode;}}//根据编号修改节点中的信息,即编号不能改public void update(HeroNode newHeroNode){if (head.next == null){System.out.println("链表为空!");return;}HeroNode temp = head.next;boolean flag = false; //标记是否在链表中找到该编号while (true){if (temp.next == null){break;}if (temp.no == newHeroNode.no){flag = true;break;}temp = temp.next;}if (flag){temp.name = newHeroNode.name;temp.nikeName = newHeroNode.nikeName;}else {System.out.printf("未找到编号为%d的英雄人物",newHeroNode.no);}}//根据编号删除节点public void remove(HeroNode delHeroNode){if (head.next == null){System.out.println("链表为空!");}HeroNode temp = head;boolean flag = false; //标记是否找到要删除的节点while (true){if (temp.next == null){break;}if (temp.next.no == delHeroNode.no){ //应该找到的是要删除节点的前一个节点flag = true;break;}temp = temp.next;}if (flag){temp.next = temp.next.next;}else {System.out.println("未在链表中找到该编号的节点!");}}//显示链表(遍历)public void list(){if (head.next == null){System.out.println("链表为空!");return;}HeroNode temp = head.next;while (true){if (temp == null){break;}System.out.println(temp);temp = temp.next;}}
}

③测试类

public class SingleLinkedListDemo {public static void main(String[] args) {//英雄人物HeroNode heroNode1 = new HeroNode(1, "宋江", "及时雨");HeroNode heroNode2 = new HeroNode(2, "卢俊义", "玉麒麟");HeroNode heroNode3 = new HeroNode(3, "吴用", "智多星");HeroNode heroNode4 = new HeroNode(4, "林冲", "豹子头");//创建一个列表并采用方式一添加节点
//        SingleLinkedList singleLinkedList1 = new SingleLinkedList();
//        singleLinkedList1.add1(heroNode1);
//        singleLinkedList1.add1(heroNode2);
//        singleLinkedList1.add1(heroNode3);
//        singleLinkedList1.add1(heroNode4);//创建一个列表并采用方式二添加节点SingleLinkedList singleLinkedList2 = new SingleLinkedList();singleLinkedList2.add2(heroNode4);singleLinkedList2.add2(heroNode1);singleLinkedList2.add2(heroNode3);singleLinkedList2.add2(heroNode2);singleLinkedList2.add2(heroNode3);//修改HeroNode newHeroNode = new HeroNode(3, "吴先生", "智much星");singleLinkedList2.update(newHeroNode);//删除singleLinkedList2.remove(heroNode2);//遍历显示链表singleLinkedList2.list();}
}

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

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

相关文章

c语言队列原理的实现,c印记(十二):队列queue原理与实现

一、简而言之在百度百科里面摘取了一段关于队列(queue)的介绍:队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。…

w ndows7与XP哪个好,Win7系统与Win XP系统哪个更好?Windows7与WindowsXP区别介绍-系统城·电脑系统下载之家...

虽然微软已经停止对xp系统的维护,但是仍有不少用户有这样一个疑惑:Win7系统与WinXP系统哪个更好?接下来,小编就向大家具体介绍Windows7与WindowsXP的区别,让你知道到底哪个系统会更好一些。首先跟系统城小编一起来看微…

一文完整MySQL连接查询,笛卡尔乘积,内连接外连接交叉连接

文章目录笛卡尔乘积连接查询分类等值连接非等值连接自连接外连接交叉连接连接查询又称为多表查询,当查询的字段来自于多个表时,使用连接查询。 笛卡尔乘积 笛卡尔乘积现象:表1有m行,表2有n行,结果有m*n行 发生原因&a…

【PostmanJMeter】使用Postman和JMeter进行signature签名

一、前言 ​ 有些接口的请求会带上sign(签名)进行请求,各接口对sign的签名内容、方式可能不一样,但一般都是从接口的入参中选择部分内容组成一个字符串,然后再进行签名操作, 将结果赋值给sign; 完整规范的接口文档都会…

詹金斯搭建_詹金斯的Maven报告

詹金斯搭建代码质量是一个敏感的话题。 它会影响您的维护成本以及客户满意度。 更不用说您的开发人员使用代码的动力了。 谁想要修复难看的代码,对吗? 讨论代码质量总是需要事实和数字! 因此,这是一个简短的教程,介绍…

Oracle应用容器云的自由

在这篇博客文章中,我将介绍如何部署CloudEE封装在杜克大学应用自由尤伯杯罐子Oracle应用集装箱云端 。 在Oracle Application Container Cloud中进行部署所需的部署工件是一个ZIP归档文件,其中包含应用程序ber-jar和清单文件(manifest.json&…

简洁明了!Java实现单向环形链表以解决约瑟夫环Josepfu问题

文章目录简单介绍代码实现简单介绍 如果把单链表的最后一个节点的指针指向链表头部,而不是指向NULL,那么就构成了一个单向循环链表,通俗讲就是让尾节点指向头结点。 单向环形链表应用场景:Josephu(约瑟夫、约瑟夫环)问题&#xf…

荣耀v10Android9新功能,荣耀10、荣耀V10开启安卓9.0内测 日常领跑行业

【PConline 资讯】今天(8月9日)早上10点,荣耀总裁赵明发微博宣布荣耀已经有四款机型面向少部分用户推送安卓9.0内部测试版本。实际上,在8月8日晚上,花粉论坛就已经公布华为4款机型内测安卓 9.0 版本,荣耀手机两款旗舰进入升级名单…

状态模式 设计模式_设计模式:状态

状态模式 设计模式本文将介绍状态设计模式 。 它是行为设计模式之一 。 您无需了解许多理论即可了解模式的主要概念。 该文章将分为几个部分,在其中我将提供有关需要应用该模式的情况,它所具有的利弊以及用法示例的信息。 有时,当对象的内部…

Java中的AES加密和解密(CBC模式)

通过有线方式传输诸如纯文本密码之类的机密数据总是容易受到安全性的影响,始终建议对此类信息进行加密并使用SSL传输这些机密数据.Java为此提供了多种加密算法。在本文中,我们将讨论Java中具有CBC模式的AES(高级加密标准)对称加密…

hiti打印机android驱动,HiTi 打印机 驱动程序下载——更新 HiTi 软件

HiTi 打印机驱动程序下载如何手动下载和更新:你可以通过 %%os%% 或通过执行 Windows 更新获取基本的 HiTi Printer 驱动程序。 内置驱动程序将支持Printer的基本功能,但通常不支持更高级的功能。以下是手动更新这些 HiTi 设备驱动程序的完整指南。程序员: HiTi 类别…

Java实现最小二乘法线性拟合,传感与检测,单臂半桥全桥实验,江南大学自动化

因为作为资源上传不方便我们获取且我想免费分享给有需要的小伙伴,以后所有实验报告都通过文章形式记录输出了,仅供参考,欢迎交流。(最小二乘法代码在文末) 电桥特性曲线: Java实现最小二乘法线性拟合及计算…

android task详解,Android AsyncTask的使用详解

当然,我们在进行耗时操作或者更新UI时,是可以使用匿名线程的,但是此种方式是存在缺陷的:第一,线程的开销较大,如果每个任务都要创建一个线程,那么应用 程序的效率要低很多;第二&…

【Error】IDEA报错:org.jetbrains.jps.builders.java.dependencyView.TypeRepr$PrimitiveType cannot be cast t

错误日志: org.jetbrains.jps.builders.java.dependencyView.TypeRepr$PrimitiveType cannot be cast to org.jetbrains.jps.builders.java.dependencyView.TypeRepr$ClassType 解决方法:

ReSQL的?

大约在2009年创造出来的NoSQL名字标志着从“传统”关系模型的转变。 在2009年之前,有相当多的非关系数据库,但是在最近几年中,我们看到了许多新产品(例如, 我在上一篇文章中可以看到“ NoSQL格局” )。 一般…

数据结构,Java实现递归回溯,寻找出迷宫路线,解决迷宫问题

/*** Author: Yeman* Date: 2021-10-28-22:52* Description:*/ public class Labyrinth {public static void main(String[] args) {//七行八列的迷宫地图int[][] map new int[8][7];//设置墙for (int i 0; i < 7; i) {map[0][i] 1;map[7][i] 1;}for (int i 0; i < …

android动画优缺点,Android动画总结

动画分为三种&#xff1a;View动画、帧动画和属性动画View动画View动画共有四种动画&#xff1a;TranslateAnimation、RotateAnimation、ScaleAnimation和AlphaAnimation。四个动画类都继承于抽象类Animation。名称标签子类效果平移动画TranslateAnimation移动View缩放动画Scal…

Java实现递归回溯,解决八皇后问题,数据结构与算法

文章目录八皇后问题解决思路代码实现运行结果八皇后问题 八皇后问题&#xff0c;是一个古老而著名的问题&#xff0c;是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯贝瑟尔于1848年提出&#xff1a;在8X8格的国际象棋上摆放八个皇后&#xff0c;使其不能互相攻击&#x…

HTML JS正方形轮播,js,html一个页面里面多个页面轮播

这种轮播都是div或者图片的&#xff0c;div能换成iframe显示嵌套网页吗&#xff1f;或者请问有没有其他方法能实现多个页面轮播&#xff1f;我写了三个iframeframeborder"no" border"0" marginwidth"0" marginheight"0" scrolling&quo…