(Java)在单链表中如何插入单个节点
程序员文章站
2024-03-22 12:51:10
...
按照编号的顺序插入节点
上一文章是说是说不按顺序来插入的情况下,怎样创建单链表,但是这种情况很有局限性,比如说如果我想往中间插入一个节点的话,那么就会没有办法。所以我们要学会如何在链表中随时随地,任意插入一个节点。
代码如下:
先写SingleLinkedList类,在原有的基础上再添加一个新的addByOrder方法就可以了。
//思路二,当考虑编号顺序时(还有当插入某个节点时)
//(如果有这个排名,则添加失败)
public void addByOrder(HeroNode heroNode){
//因为头节点不能动,因此我们仍然通过一个辅助变量来帮助找到要添加的位置
//因为是单链表,只能单向移动 ,因此我们的辅助变量只能找到添加位置的前一个节点,否则添加不了
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; //后移,遍历当前链表;
}
if(flag){//不能添加,说明编号存在
System.out.printf("准备插入的英雄的编号%d 已经存在了,不能加入\n",heroNode.next.no);
}else{
//插入到链表中,temp的后面
heroNode.next =temp.next;
temp.next = heroNode;
}
}
再简单写一下main类(故意打乱了顺序)
package 单链表;
public class Main {
public static void main(String[] args) {
//测试一下
//先创建节点
HeroNode h1 = new HeroNode(1,"宋江","及时雨");
HeroNode h2 = new HeroNode(2,"卢俊义","玉麒麟");
HeroNode h3 = new HeroNode(3,"吴用","智多星");
HeroNode h4 = new HeroNode(4,"林冲","豹子头");
//创建链表
SingleLinkedList s1 = new SingleLinkedList();
//添加数据到链表中
//加入按照编号的顺序
s1.addByOrder(h1);
s1.addByOrder(h4);
s1.addByOrder(h2);
s1.addByOrder(h3);
//显示链表
s1.list();
}
}
运行截图和上一篇文章一样。
附上一篇文章地址:
https://mp.csdn.net/mdeditor/101212274#