思路:
- 通过辅助变量(temp指针)找到新添加结点位置 (遍历)
- 新的节点.next=temp.next
- temp.next=新结点
由于单链表,所以我们要找的是添加位置的前一个结点,否则无法插入
temp遍历注意的点;
①next指向空,即temp所指为最后一个结点,无法与next.no比较,且temp已经指向目标位置
②下一个节点编号与待插入节点编号相同,按题目要求处理
③正常遍历,无需多说
public void addByOrder(HeroNode heroNode){
//因为头结点不能动,通过辅助变量(指针)来找到添加位置
//由于单链表,所以我们要找的是添加位置的前一个结点,否则无法插入
HeroNode temp=head;
boolean flag=false;//表示添加编号是否存在,默认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值,,,为true不能添加
if (flag){
System.out.println("英雄已存在,不能加入");
}
else {
heroNode.next=temp.next;
temp.next=heroNode;
}
}
测试代码:
SingleLinkedList singleLinkedList=new SingleLinkedList();
//无序加入成员
//singleLinkedList.add(hero4);
//singleLinkedList.add(hero3);
//singleLinkedList.add(hero2);
//singleLinkedList.add(hero1);
//按序号加入成员
//加入成员
singleLinkedList.addByOrder(hero4);
singleLinkedList.addByOrder(hero3);
singleLinkedList.addByOrder(hero2);
singleLinkedList.addByOrder(hero1);
//显示一把
singleLinkedList.ShowList();
}
结果:不是按序号插入,,却按序号大小显示,,,成功