“携手创作,共同成长!开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第8天,点击查看活动详情”
单链表实例:
使用head头的单向链表实现—原神愚人众排行榜管理,来完成对人物的修改操作。
head头节点,不存放任何数据,就是代表一个单链表的标头
以判断链表是否为null来为链表结束的标志
3)单链表删除
思路分析:跟更新节点信息很相似,但不同的是删除链表的同时还要将前一个表的next下一个节点相连
1.我们先找到需要删除这个节点的前一个节点temp,还是用一个辅助节点来帮助我们,在比较的过程中是通过temp.next.no和要找的no进行比较
2.然后更新这个节点next域为删除节点的后一个节点,temp.next=temp.next.next
3.被删除的节点不会有其他的引用,将会被垃圾回收机制所回收
根据no编号来删除节点的信息
代码实现:
//判断是否为空
if(head.next==null) {
System.out.println("链表为空");
return;
}
//找到需要修改的节点,根据no编号,还是要先定义一个辅助变量
HeroNode temp=head;
//定义是否找到该值
boolean flag=false;
while (true) {
if (temp.next==null) {
//已经遍历完链表了
break;
}
if(temp.next.no==no)
{
//已经找到了可以进行
flag=true;
break;
}
temp=temp.next;
}
//根据flag来进行改值
if(flag) {
temp.next=temp.next.next;
System.out.printf("第%d席执行官已经删除完毕\n",temp.no+1);
}else {
System.out.printf("没有找到该%d席执行官\n",no);
}
}
测试代码
public static void main(String[] args) {
//进行测试
//创建节点
HeroNode hero1 = new HeroNode(1, "皮耶罗","丑角" );
HeroNode hero2 = new HeroNode(2, "多托雷","博士" );
HeroNode hero3 = new HeroNode(3, "哥伦比娅","少女" );
HeroNode hero4 = new HeroNode(4, "阿蕾奇诺","仆人" );
HeroNode hero5 = new HeroNode(5, "普契涅拉","公鸡" );
HeroNode hero6 = new HeroNode(6, "国崩","散兵" );
HeroNode hero7= new HeroNode(7, "桑多涅","木偶" );
HeroNode hero8= new HeroNode(8, "罗莎琳","女士" );
HeroNode hero81= new HeroNode(8, "无","无" );
HeroNode hero9 = new HeroNode(9, "潘塔罗涅","富人" );
HeroNode hero10 = new HeroNode(10, "卡皮塔诺","队长" );
HeroNode hero11 = new HeroNode(11, "达达利亚","公子" );
//创建单链表
SingleLinkedList singleLinkedList = new SingleLinkedList();
//将数据添加进单链表中
singleLinkedList.add1(hero2);
singleLinkedList.add1(hero1);
singleLinkedList.add1(hero4);
singleLinkedList.add1(hero3);
singleLinkedList.add1(hero5);
singleLinkedList.add1(hero6);
singleLinkedList.add1(hero8);
singleLinkedList.add1(hero9);
singleLinkedList.add1(hero7);
singleLinkedList.add1(hero11);
singleLinkedList.add1(hero10);
singleLinkedList.delete(8);
singleLinkedList.list();
}