packagecom.lin.linkedlist_0131;/*** 在内存里面直接将数据排好,不用在数据库里面排,效率高
* @Description:
*@authorLinZM
* @date 2021-1-31 20:40:54
*@versionV1.8*/
public classSingleLinkedListTest {public static voidmain(String[] args) {
SingleLinkedList singleLinkedList= newSingleLinkedList();//singleLinkedList.addHero(new HeroNode(1, "伍六七", "柒"));//singleLinkedList.addHero(new HeroNode(2, "赵六", "陆"));//singleLinkedList.addHero(new HeroNode(3, "一二三", "叁"));//singleLinkedList.addHero(new HeroNode(4, "李爸爸", "捌"));//singleLinkedList.addHero(new HeroNode(5, "李妈妈", "玛"));
singleLinkedList.addHeroByOrder(new HeroNode(1, "伍六七", "柒"));
singleLinkedList.addHeroByOrder(new HeroNode(2, "赵六", "陆"));
singleLinkedList.addHeroByOrder(new HeroNode(2, "赵六", "陆"));
singleLinkedList.addHeroByOrder(new HeroNode(4, "李爸爸", "捌"));
singleLinkedList.addHeroByOrder(new HeroNode(3, "一二三", "叁"));
singleLinkedList.list();
}
}/***
* @Description: 定义SingleLinkedList管理英雄
*@authorLinZM
* @date 2021-1-31 20:46:53
*@versionV1.8*/
classSingleLinkedList{//初始化头结点,一般不动
private HeroNode head = new HeroNode(0, "", "");/*** 添加节点到单向链表
* 1 找到当前链表的最后节点
* 2 将最后这个节点的next指向新的节点
* @Description:
*@authorLinZM
* @date 2021-1-31 21:12:23
*@versionV1.8*/
public voidaddHero(HeroNode heroNode){//因为head节点不能动,因此我们需要一个辅助变量temp
HeroNode temp =head;//遍历链表,找到最后节点
while(true) {if(temp.next == null) {break;
}//如果没有找到,就将这个temp后移
temp =temp.next;
}//当循环结束时,temp指向链表最后//将最后这个节点的next指向新的节点
temp.next =heroNode;
}//第二种方式添加英雄是,根据排名将英雄插入到指定位置//(如果相同排名则插入失败)
public voidaddHeroByOrder(HeroNode heroNode) {
HeroNode temp=head;boolean flag = false;//标识添加的编号是否存在
while(true) {if(temp.next == null) {break;
}if(temp.next.no >heroNode.no) {break;
}else if(temp.next.no ==heroNode.no) {
flag= true;break;
}
temp=temp.next;
}//退出循环后//判断flag
if(flag) {
System.out.printf("待插入的英雄的编号%d已经存在,不能添加了\n",heroNode.no);
}else{//尾插法//新节点.next = temp.next//temp.next = 新节点
heroNode.next =temp.next;
temp.next=heroNode;
}
}//显示链表
public voidlist() {//判断链表是否为空
if(head.next == null) {
System.out.println("链表为空!");return;
}//因为头结点不动,因此我们需要一个辅助变量temp
HeroNode temp =head.next;while(true) {//判断是否到链表最后
if(temp == null) {break;
}//输出链表信息
System.out.println(temp);
temp=temp.next;
}
}
}/***
* @Description: 定义HeroNode,每个HeroNode对象时一个节点
*@authorLinZM
* @date 2021-1-31 20:47:02
*@versionV1.8*/
classHeroNode{public intno;publicString name;publicString nickname;publicHeroNode next;public HeroNode(intno, String name, String nickname) {super();this.no =no;this.name =name;this.nickname =nickname;
}
@OverridepublicString toString() {return "HeroNode [no=" + no + ", name=" + name + ", nickname=" + nickname + "]";
}
}