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


    单向链表的修改

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

    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

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

    我们发现李逵已经不见了

  • 相关阅读:
    vue 组件基础
    PowerDesigner 设置
    【matlab】智能优化算法优化BP神经网络
    1995-2020年全国各省二氧化碳排放量面板数据
    喜讯 | 怿星科技获评SAE“优秀核心零部件企业”,测试软件平台工具广受赞誉
    格式优雅的表单标签
    MyBatis中如何实现一个分页功能呢?
    List接口
    NLP(15)-序列标注任务
    关于ddos你了解多少?
  • 原文地址:https://blog.csdn.net/Chad_it/article/details/127728707