第二种方式:在添加英雄时,根据排名将英雄插入到指定的位置(如果有这个排名,则添加失败,并给出提示)
//第二种方式在添加英雄时,根据排名将英雄插入到指定位置
//(如果有这个排名,则添加失败,并给出提示)
public void addByOrder(HeroNode heronode){
//因为头节点不能动,因此我们仍然通过一个辅助指针(变量)来帮助找到添加的位置
//因为单链表,因为我们找的temp 是位于 添加位置的前一个节点,否则插入不了
HeroNode temp=head;
boolean flag = false;// flag标志添加的编号是否存在,默认为false
while(true){
if(temp.next==null){//说明temp已经在链表的最后
break;
}
if(temp.next.no>heronode.no){//位置找到,就在temp的后面插入
break;
}else if(temp.next.no==heronode.no){//说明希望添加的heroNode的编号已然存在
flag=true;
break;
}
temp = temp.next;
}
//判断flag的值
if(flag){
//不能添加,说明编号存在
System.out.printf("准备插入的英雄的编号 %d 已经存在了, 不能加入\n", heronode.no);
}else{
//插入到链表中,temp的后面
heronode.next=temp.next;
temp.next=heronode;
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
//进行测试
//先创建节点
HeroNode hero1 = new HeroNode(1, "宋江", "及时雨");
HeroNode hero2 = new HeroNode(2, "卢俊义", "玉麒麟");
HeroNode hero3 = new HeroNode(3, "吴用", "智多星");
HeroNode hero4 = new HeroNode(4, "林冲", "豹子头");
//创建要给链表
SingleLinkedList singleLinkedList = new SingleLinkedList();
//加入按照编号的顺序
singleLinkedList.addByOrder(hero1);
singleLinkedList.addByOrder(hero4);
singleLinkedList.addByOrder(hero2);
singleLinkedList.addByOrder(hero3);
//显示一把
singleLinkedList.list();
}
}