单链表的具体实现(java)

阅读: 评论:0

单链表的具体实现(java)

单链表的具体实现(java)

链表(Linked List)

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w5a2WQqd-1669549256447)(.png)]

小结:

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a4t2A50M-1669549256448)(.png)]

代码实现

  • 添加数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WfBcsGGI-1669549256449)(.png)]

  • 根据编号的排名进行插入操作

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SFbSUL6j-1669549256450)(.png)]

  • 修改单链表的修改

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N6hlVEpj-1669549256451)(.png)]

  • 删除节点

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HrtukKnR-1669549256453)(.png)]

代码

package com.wiselee.linkedlist;/*** @PROJECT_NAME: DataStruct* @DESCRIPTION:* @USER: 28416* @DATE: 2022/11/27 17:40* 单向链表*/
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 singleLinkedList = new SingleLinkedList();
//        singleLinkedList.add(heroNode1);
//        singleLinkedList.add(heroNode2);
//        singleLinkedList.add(heroNode3);
//        singleLinkedList.add(heroNode4);//加入是按编号的顺序singleLinkedList.addByOrder(heroNode1);singleLinkedList.addByOrder(heroNode4);singleLinkedList.addByOrder(heroNode2);singleLinkedList.addByOrder(heroNode3);singleLinkedList.list();HeroNode newHead = new HeroNode(2, "小路", "玉麒麟~~~");singleLinkedList.update(newHead);singleLinkedList.list();int res = singleLinkedList.deleteNode(1);System.out.println(res);singleLinkedList.list();//}
}
//定义SingleLinkedList 来管理我们的英雄
class SingleLinkedList{private  HeroNode head = new HeroNode(0,"","");//不存放具体的数据/*** 添加链表* @param heroNode*///添加节点到单向链表public void add(HeroNode heroNode){HeroNode tem = head;while (true){if ( == null){break;}//如果没有找到最后,就将tem后移tem = ;} = heroNode;}/*** 遍历链表*/public void list(){if ( == null){System.out.println("链表为空");return;}//因为头结点不能动HeroNode tem = ;while (true){if (tem == null){break;}System.out.println(tem);tem = ;}}/*** 根据编号的顺序进行插入* @param heroNode*/public void addByOrder(HeroNode heroNode){HeroNode tem = head;boolean flag = false;while (true){if ( == null){//说明已经在链表的最后break;}if ( > ){break;}else o == ){flag = true;//说明标号存在break;}tem = ;}if (flag) {System.out.printf("准备插入的英雄编号%d已经存在了,不能再添加了n",);return;//不能添加,说明标号已经存在}else { = ; = heroNode;}}/*** 更新节点的信息* @param newheroNode*/public void update(HeroNode newheroNode){if ( == null){System.out.println("链表为空");return;}//定义一个辅助变量HeroNode temp = ;boolean flag = false;//表示是否找到该节点while (true){if (temp == null){break;//遍历完链表}if ( == ){flag = true;break;}temp = ;}if (flag) {temp.name = newheroNode.name;temp.nickName = newheroNode.nickName;}else {System.out.printf("没有找到编号为%dn",);}}public int deleteNode(int n ){HeroNode temp = head;boolean flag = false;while (true){if ( == null){break;}if ( == n){flag =true;break;}temp &#;}if (flag) { = ;return 1;}else {System.out.printf("我们要删除的编号%d不存在n",n);return -1;}}}
//定义HeroNode,每个HeroNode对象就是一个节点
class HeroNode{public int no;public  String name;public String nickName;public  HeroNode next;//指向下一个节点public HeroNode(int no, String hName,String hNickName){ = no;this.name = hName;this.nickName = hNickName;}@Overridepublic String toString() {return "HeroNode{" +"no=" + no +", name='" + name + ''' +", nickName='" + nickName + ''' +'}';}
}

源码链接:.java

本文发布于:2024-01-30 18:19:00,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170660994421918.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:链表   java
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23