链表是有序的列表,但是它在内存中是存储如下的:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w5a2WQqd-1669549256447)(.png)]
小结:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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小时内删除。
留言与评论(共有 0 条评论) |