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程序员

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三七有脾气

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值