项目地址:在SingleLinkedListDemo模块
1.代码
1.删除代码
public void delete(int no) {
//判断队列是否为空
if (head.next==null) {
System.out.println("队列为空,无法删除");
return;
}
HeroNode temp = head.next;
boolean flag=false;//用于标记是否有得删除,有true,没有false
//队列不为空的话进行遍历,然后找到要删除的前一个节点
while (true) {
//判断队列是否为最后一个了,如果是的话,就break
if (temp==null) {
System.out.println("队列已经遍历完了,找不到,所以无法删除");
flag=false;
break;
}
if (temp.next.no==no) {
//表示找到了,直接标记为找到
flag=true;
break;
}
//没有找到,就后移
temp=temp.next;
}
if (flag==true) {
temp.next=temp.next.next;
}else {
System.out.println("不存在要删除的队列节点");
}
}
2.测试
HeroNode heroNode = new HeroNode(1, "唐三", "昊天宗");
HeroNode heroNode1 = new HeroNode(2, "小舞", "十万年魂兽");
HeroNode heroNode2 = new HeroNode(3, "宁荣荣", "七宝琉璃宗");
HeroNode heroNode3 = new HeroNode(4, "千仞雪", "武魂殿");
myLinkedList.list();
//对链表进行删除
myLinkedList.delete(3);
myLinkedList.list();
2.逻辑
1.删除前(下面删除2节点):
2.删除后():
3.解释:
这里要删除2节点,我们选择找到1节点,即要删除节点的上一个,而删除节点2的上一个就是2。为什么要找到这个呢。
如果找到的是2节点,那么我们将很难对1节点的next进行修改为3.而找到1节点后,我们通过1节点.next与1节点.next.next,就可以找到3节点了。1节点直接连接到3后,2节点将不可达(没有索引到它的点),将被垃圾回收机制回收。
3.问题与反思
1.while循环的时候记得break,不然将一直无限循环
这样很浪费时间