Java如何实现带头结点的单链表
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,这篇文章主要介绍Java如何实现带头结点的单链表,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!链表的特点1,以节点方式存储,是链式结构。2,每个节点包含data域,next域:
千家信息网最后更新 2025年11月07日Java如何实现带头结点的单链表
这篇文章主要介绍Java如何实现带头结点的单链表,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
链表的特点
1,以节点方式存储,是链式结构。
2,每个节点包含data域,next域:指向下一个节点。
3,链表的各个节点不一定是连续存储。
4,链表分为带头节点和不带头节点两种类型的链表。
实现原理
添加节点:首先遍历原有链表,找到最后一个节点,将要增加的节点添加到该节点的后面。下面介绍如何找到最后一个节点。
思路是这样的,先遍历整个链表,定义一个辅助变量temp,用于暂时存储遍历出来的各个节点。首先将head头节点赋给temp(从头节点开始遍历),通过一个死循环不断的遍历节点的next,直到temp.next==null时,该节点temp就是链表的最后一个节点,只需要将该节点的next指向新增节点就行了。
修改节点:首先遍历整个链表,通过传入的编号去匹配原有的链表的编号,找到对应的编号将节点里面的数据替换即可。
删除节点:如图所示,要删除某一节点,需要遍历整个链表,找到该节点对应的编号,再将该前一个节点的next指向要删除的节点的后面的一个节点,即(temp.next = temp.next.next)。由于被删除的节点没有被引用,将会被垃圾回收机制回收掉。
主要代码
package cn.mrlij.linkedlist;/*** * 单链表的实现 * @author dreamer * */public class SingleLinkedList { public static void main(String[] args) { SingleLinkedListDemo s = new SingleLinkedListDemo(); HeroNode h2 = new HeroNode(1, "宋江", "及时雨"); HeroNode h3 = new HeroNode(3, "卢俊义", "玉麒麟"); HeroNode h4 = new HeroNode(4, "吴用", "智多星"); HeroNode h5 = new HeroNode(2, "林冲", "豹子头"); s.addByOrder(h2); s.addByOrder(h3); s.addByOrder(h4); s.addByOrder(h5); System.out.println("修改前----"); s.list();// HeroNode h6 = new HeroNode(4, "有用", "超星星");// s.update(h6); s.del(1); s.del(4); s.del(2); s.del(3); System.out.println("删除后----"); s.list(); } }class SingleLinkedListDemo{ //创建一个头结点,初始化数据,头结点不要动,不放具体的数据 private HeroNode head = new HeroNode(0,"",""); //添加英雄 public void add(HeroNode node) { //先找出最后的一个节点,把新加的节点放在最后一个节点的后面 HeroNode temp = head; while(true) { if(temp.next == null) { break; } temp = temp.next; } temp.next = node; } public void addByOrder(HeroNode node) { HeroNode temp = head; boolean flag = false; while(true) { if(temp.next == null) { break; } if(temp.next.no>node.no) { break; }else if(temp.next.no == node.no) { flag = true; break; } temp = temp.next; } if(flag) { System.out.println("编号"+node.no+"已经存在了!"); }else { node.next = temp.next; temp.next = node; } } public void update(HeroNode node ) { if(head.next == null) { System.out.println("链表为空!"); return; } HeroNode temp = head.next; boolean flag = false; while(true) { if(temp == null) { break; } if(temp.no == node.no) { flag = true; break; } temp = temp.next; } if(flag) { temp.name = node.name; temp.nickname = node.name; }else { System.out.println("不存在该节点!"); } } //删除节点 public void del(int no) { if(head.next == null) { System.out.println("链表为空!"); return; } HeroNode temp = head; boolean flag = false; while(true) { if(temp.next == null) { break; } if(temp.next.no == no) { flag = true; break; } temp = temp.next; } if(flag) { temp.next = temp.next.next; }else { System.out.println("该节点不存在!"); } } public void list() { HeroNode temp = head; if(temp.next == null) { System.out.println("链表为空!"); return; } while(true) { if(temp.next == null) { break; } System.out.println(temp.next); temp = temp.next; } }}class HeroNode{ public int no;//英雄编号 public String name;//人名 public String nickname;//绰号 public HeroNode next;//下一个节点 public HeroNode(int no, String name, String nickname) { this.no = no; this.name = name; this.nickname = nickname; } @Override public String toString() { return "HeroNode [no=" + no + ", name=" + name + ", nickname=" + nickname + "]"; } }以上是"Java如何实现带头结点的单链表"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!
节点
结点
指向
数据
存储
内容
篇文章
英雄
循环不断
不断
个头
人名
从头
代码
价值
兴趣
原理
及时雨
变量
垃圾
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
食药安全保障数据库
我的世界服务器客户端启动就没了
gis软件开发浯
大华服务器怎么添加海康设备
福建统一软件开发服务品质保障
网络安全需要怎么加强
app与数据库数据同步
学校网络安全发言稿
在数据库中的如下两个表
大专学网络技术需要英语
温州软件开发得多少钱
北邮大二数据库实验
tomcat实现搜索数据库
姑苏区推广网络技术成本
华东师范网络安全
高防服务器怎么防护ddos
贵阳最专业的软件开发公司
软件开发测试实训室是干嘛的
csgo本地服务器延迟大
成都信息网络安全协会网站
快手软件开发人是谁
荆州定制软件开发方案
企业落实行业网络安全
网络安全和舆情应对
存薪水 类型 数据库
平台数据库有哪些
中国移动网络技术笔试
软件开发面试需要带什么吗
服务器验证IP用什么命令
搞软件开发项目