• 数据结构与算法-单向链表的修改和删除操作


    单向链表的修改

    在上面的代码基础上定义几个英雄

    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,"李逵","李鬼");
    
    • 1
    • 2
    • 3
    • 4
    • 5

    我们用顺序的插入

    singleLinkedList.addByOrder(hero1);
    singleLinkedList.addByOrder(hero4);
    singleLinkedList.addByOrder(hero2);
    singleLinkedList.addByOrder(hero3);
    singleLinkedList.addByOrder(hero5);
    
    • 1
    • 2
    • 3
    • 4
    • 5

    插入成功
    在这里插入图片描述

    然而我们发现李逵别名不是李鬼,我们要对其进行修改
    我们再次定义对的Hero

    HeroNode hero6 = new HeroNode(5,"李逵","黑旋风");
    
    • 1

    我们编写update()方法

        public void updateHero(HeroNode newHeroNode){
            if(head.next == null){
                System.out.println("链表为空");
                return;
            }
            HeroNode temp = head.next;
            boolean flag = false; //表示是否找到节点
            while(true){
                if(temp ==  null){
                    break;//遍历完了链表
                }
                if(temp.no == newHeroNode.no){
                    //find it
                    flag = true;
                    break;
                }
                temp = temp.next;
            }
            if(flag){
                temp.name = newHeroNode.name;
                temp.nickName = newHeroNode.nickName;
            } else  {
                System.out.printf("Can't find Hero what no is %d ", newHeroNode.no);
                
            }
    
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    再main方法中加入update()
    在这里插入图片描述

    我们在插入李鬼后,再去修改,运行程序
    在这里插入图片描述

    我们发现李鬼已经改为了黑旋风。

    单向链表的删除

    思路分析
    在这里插入图片描述

    先找到需要删除的节点的前一个节点;
    temp.next = temp.next.next
    被删除的节点,将不会有其他引用指向,会被垃圾回收机制回收

    编写方法deleteHero

    //删除节点
    public void deleteHero(int no){
        if(head.next == null){
            return;
        }
        HeroNode temp = head.next;
        boolean flag = false;
        while (true){
            if(temp.next == null){
                System.out.println("已经遍历完");
                break;
            }
            if(temp.next.no == no){
                flag = true;
                break;
            }
            temp = temp.next;
        }
        if(flag){
            temp.next = temp.next.next;
        }else {
            System.out.printf("The hero you input %d could not be found",no);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    在主方法中加入删除方法,我们删除5号

    singleLinkedList.deleteHero(5);
    
    • 1

    运行结果
    在这里插入图片描述

    我们发现李逵已经不见了

  • 相关阅读:
    Java之HashMap经典算法-红黑树(插入节点平衡调整,左旋转,右旋转)
    06-Redis缓存高可用集群
    logback-spring.xml配置文件标签(超详解)
    ROS仿真环境搭建
    vue中的虚拟dom
    FreeTAKServer安装教程
    【Android进阶】1、Android Studio 项目搭建
    显示支付结果_WebSocket实现_方案2
    计算机网络期末复习-计算机网络体系结构第一章(王道25)
    Nginx 常用的基础配置(前端相关方面)
  • 原文地址:https://blog.csdn.net/Chad_it/article/details/127728707