java实现单链表的创建,查询与显示(按id显示)
数据结构之单链表的创建,查询与显示(按id显示)
package cn.ycl.dataStructures;
public class singleListdemo {
public static void main(String[] args) {
singleList list = new singleList();
heroNode hero1 = new heroNode("张三", 1, "大哥");
heroNode hero2 = new heroNode("李四", 2, "二哥");
heroNode hero3 = new heroNode("王五", 3, "三哥");
heroNode hero4 = new heroNode("赵柳", 4, "四弟");
list.addById(hero1);
list.addById(hero4);
list.addById(hero2);
list.addById(hero3);
list.list();
}
}
class heroNode {
private String name;
private int id;
private String nickname;
heroNode next;// 指向下一个节点
// 构造器
public heroNode(String name, int id, String nickname) {
super();
this.name = name;
this.id = id;
this.nickname = nickname;
// 生成getter,setter方法
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public heroNode getNext() {
return next;
}
public void setNext(heroNode next) {
this.next = next;
}
// 无参构造器
public heroNode() {
super();
}
@Override
public String toString() {
return "heroNode [name=" + name + ", id=" + id + ", nickname=" + nickname + "]";
}
}
//创建一个单链表,存储heroNode,对象就是一个
class singleList {
// 定义一个头结点
heroNode head = new heroNode();
/**
*这是按添加顺序排列的添加方法
// 定义一个添加节点的方法
void add(heroNode hero) {
// 因为head节点不能动,我们需要一个辅助节点进行遍历输出
heroNode temp = new heroNode();
temp = head;
// 遍历链表,找到最后
while (true) {
if (temp.next == null) {
break;
}
temp = temp.next;
}
// 跳出了while循环表示此时的temp已经是最后一个节点,将要添加的节点赋值给temp的下一个节点即可
temp.next = hero;
}
*/
// 显示链表
public void list() {
// 先判断链表是否为空
if (head.next == null) {
System.out.println("链表为空");
return;
}
// 因为头结点不能动,也需要一个辅助节点来遍历
heroNode temp = head.next;
while (true) {
// 判断链表是否到最后了
if (temp.next == null) {
System.out.println(temp);
break;
}
System.out.println(temp);
temp = temp.next;
}
}
//按照id进行查询自动排序的
public void addById(heroNode hero) {
Boolean flagBoolean = false;
// 同样需要一个中间辅助节点
heroNode temp = head;
while (true) {
if (temp.next == null) {// 若以及在链表末端,则结束循环;
break;
}
if (temp.next.getId()> hero.getId()) {
break;
}else if (temp.next.getId()== hero.getId()) {
flagBoolean=true;//说明编号存在
break;
}
// 若temp的下一个节点的id比要添加节点的id大,则表示找到插入的位置了
temp = temp.next;
}
if (flagBoolean) {
System.out.printf("该用户id为%d已存在", hero.getId());
}else {
//插入到链表中,temp的后面
hero.next=temp.next;
temp.next=hero;
}
}
}
结果:
可以看见,结果已经是按照id排序了,而我插入的顺序是1423,排序后就是1234
我是“道祖且长”,一个在互联网苟且偷生的Java程序员
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~