四、数据结构与算法 (二)单向链表 删除

项目地址:在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,不然将一直无限循环

这样很浪费时间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值