基于上一节单链表(1)中的思路改进,按照编号的顺序进行添加节点。
上一节的链接:https://blog.csdn.net/qq_42120059/article/details/107963648
-
思路
- 首先找到新添加节点的位置,通过辅助变量,然后遍历。(原因:头结点不可随意改动)
- 新的节点.next=temp.next
- 将temp.next = 新的节点
-
代码实现
// 按照方式二加入:
singleLinkedList.add2(hero1);
singleLinkedList.add2(hero4);
singleLinkedList.add2(hero2);
singleLinkedList.add2(hero3);
singleLinkedList.add2(hero3);
// 第二种添加英雄的方式,根据排名插入指定位置(如果有这个排名,则添加失败,并且给出提示)
public void add2(HeroNode heroNode) { // 寻找的temp是位于添加位置的前一个节点
HeroNode temp = head;
boolean flag = false;// 标识编号是否存在,默认为false
while (true) {
if (temp.next == null) {
break;
}
if (temp.next.no > heroNode.no) { // 位置找到了,在temp后插入
break;
} else if (temp.next.no == heroNode.no) {
// 编号存在
flag = true;
break;
}
temp = temp.next; // 后移,遍历
}
// 判断falg的值
if (flag) {
System.out.printf("编号%d存再,不能加入\n", heroNode.no);
} else {
// 插入链表中,temp后
heroNode.next = temp.next;
temp.next = heroNode;
}
}
-
后台输出
编号3存再,不能加入
HeroNode [no=1, name=宋江, nickname=及时雨]
HeroNode [no=2, name=卢俊义, nickname=玉麒麟]
HeroNode [no=3, name=吴用, nickname=智多星]
HeroNode [no=4, name=林冲, nickname=豹子头]