用Java实现单链表有序和无序添加对象
对象类(梁山好汉):
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;
}
//重写toString
@Override
public String toString() {
return "HeroNode{" +
"no=" + no +
", name='" + name + '\'' +
", nickname='" + nickname +
'}';
}
}
将每个对象当成一个链表结点,创建一个链表类来管理对象结点,
里面包括根据编号有序和无序增加结点的方法:
class LinkedList{
//定义一个头结点,头结点不要动,不存放具体的数据
private HeroNode head = new HeroNode(0,"","");
//添加结点到单向链表
public void add(HeroNode heroNode){
//首先我们需要一个辅助指针
HeroNode temp = head;
//遍历链表找到最后,用while循环而不要用for循环
while (true){
if (temp.next == null){
break;
}else {
temp = temp.next;
}
}
temp.next =heroNode;
}
//根据英雄的编号按顺序添加结点
public void addByOrder(HeroNode heroNode){
HeroNode temp = head;
boolean flag = false;
//通过while循环找到对应的位置
while (true){
if (temp.next==null){
break;
}
else if (temp.next.no>heroNode.no){
break;
}else if (heroNode.no == temp.no){
flag = true;
break;
}else {
temp = temp.next;
}
}
if (flag){
System.out.println("已存在,不能添加");
}else {
heroNode.next = temp.next;
temp.next = heroNode;
}
}
//显示链表
public void show(){
//判断链表是否为空
if (head.next == null){
System.out.println("链表为空");
return;
}else {
HeroNode temp = head.next;
while (true){
if (temp == null){
break;
}else {
System.out.println(temp);
temp = temp.next;
}
}
}
}
}
测试类:
public class LinkedListDemo {
public static void main(String[] args) {
HeroNode hero1 = new HeroNode(1, "宋江", "及时雨");
HeroNode hero2 = new HeroNode(2, "卢俊义", "玉麒麟");
HeroNode hero3 = new HeroNode(3, "吴用", "智多星");
HeroNode hero4 = new HeroNode(4, "林冲", "豹子头");
LinkedList linkedList = new LinkedList();
// linkedList.add(hero1);
// linkedList.add(hero2);
// linkedList.add(hero3);
// linkedList.add(hero4);
linkedList.addByOrder(hero1);
linkedList.addByOrder(hero4);
linkedList.addByOrder(hero3);
linkedList.addByOrder(hero2);
linkedList.show();
}
}