Java如何实现带头结点的单链表
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要介绍Java如何实现带头结点的单链表,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!链表的特点1,以节点方式存储,是链式结构。2,每个节点包含data域,next域:
千家信息网最后更新 2026年11月01日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安全错误
数据库的锁怎样保障安全
苏州找大状互联网科技有限公司
互联网金融监管科技数据
互联网电商科技
科技信息互联网
紫鲸互联网科技
互联网科技革命
北京互联网络科技有限公司
互联网金融科技创新
呼和浩特新华互联网科技学院
互联网科技创新的路径
无锡工业互联网科技有限公司
产业互联网科技服务公司
世界互联网科技成果奖
唯美互联网科技
云南互联网科技学费
长沙渺峰互联网科技有限公司
保山互联网科技靠谱吗
保山浩联互联网科技有限公司
银川新华互联网科技学校招聘
广州全民伙伴互联网科技有限公司
互联网与新科技
互联网女皇 腾讯科技
大白互联网科技
北京三清互联网科技
互联网之后的科技是什么
山东星卡互联网科技有限公司官网
互联网科技快讯热点
互联网安防科技感
互联网的科技体现在哪里
互联网企业和网络科技有限公司