二、链表---单链表

package com.线性表.链表;
/**
 * 单向链表
 * @author wangcong
 * @date 2021/11/17 22:15:23
 * @update 2021/11/17 22:15
 */
public class SingleLinkList {
    //先初始化一个头节点,头节点不要动,不存放数据,
    private HeroNode head=new HeroNode(0,"","");
    //添加节点
    //判断下一个结点是否为空,若空,则直接将要添加的结点添加在链尾
    //当不考虑编号的顺序时
    /**
     * 1、找到单签链表的最后节点
     * 2、将最后这个节点的next 指向 新的结点
     * @param heroNode
     */
    public void addHero(HeroNode heroNode){
        //因为head结点不能动,因此我们需要一个辅助结点指向头结点
        HeroNode temp=head;
        //遍历链表找到链表的最后那一个结点
        while (true){
            //找到链表的最后
            if(temp.next==null){
                break;
            }
            //若没有找到最后的那一个结点,将temp往后移动
            temp=temp.next;
        }
        //退出while循环时,temp就指向了链表的最后的那一个结点
        temp.next=heroNode;
    }
    /**
     * 按照英雄编号id值进行添加,从小到大的顺序添加
     */
    public void addOrder(HeroNode heroNode){
        //因为head结点不能动,因此我们需要一个辅助结点指向头结点
        HeroNode temp=head;
        //flag是用于判断是否该英雄的编号已经存在,默认为FALSE
        boolean flag=false;
        while (true){
            //说明temp已经是链表的最后
            if(temp.next==null){
                break;
            }
            if(temp.next.no>heroNode.no){
                //位置找到,当前这个节点,应当加入到temp的后面---【头结点是不能动的】
                break;
            }else if(temp.next.no==heroNode.no){
                //该编号已经有英雄了,不能再加入了
                flag=true;
                break;
            }
//            指针后移
            temp=temp.next;
        }
        if(flag){
            //不可以加入
            System.out.println("该编号已经有英雄了,不能再加入了"+heroNode.no);
        }else {
            //加入,注意加入的顺序
            heroNode.next=temp.next;
            temp.next=heroNode;
        }
    }
    //遍历链表
    public void list(){
        //判断链表是否为空
        if(head.next==null){
            System.out.println("链表为空");
            return;
        }
        //因为head结点不能动,因此我们需要一个辅助结点指向头结点
        HeroNode temp=head;
        while (true){
            //判断是否到链表的最后
            if(temp==null){
                break;
            }
            //输出结点的信息
            System.out.println(temp);
            //将temp后移
            temp=temp.next;
        }
    }
    /**
     * 修改结点
     */
    public void updateNode(HeroNode heroNode) {
        /**
         * 如果链表为空
         */
        if (head.next == null) {
            System.out.println("链表为空");
            return;
        }
        //先找到该节点的位置,再进行修改
        //头结点是不能动的
        HeroNode temp=head.next;
        //判断找到该节点的标志符
        boolean flag=false;
        while (true){
            //到链尾,依旧没找到
            if(temp.next==null){
                break;
            }
            if(temp.no==heroNode.no){
                //找到该节点
                flag=true;
                break;
            }
            temp=temp.next;
        }
        if(flag){
            temp.name=heroNode.name;
            temp.nickName=heroNode.nickName;
        }else{
            System.out.println("未找到该节点");
        }
    }
    /**
     * 节点的删除
     * 根据节点的编号删除
     */
    public void deleteNode(int id){
        HeroNode temp=head;
        boolean flag=false;
        while (true){
            if(temp.next==null){
                //没有该编号的结点,所以无需删除
                break;
            }
            if(temp.next.no==id){//找到要删除的结点
                flag=true;
                break;
            }
            temp=temp.next;
        }
        if(flag){
            temp.next=temp.next.next;
        }else {
            System.out.println("没有该编号的结点,所以无需删除");
        }
    }
}
测试代码:

package com.线性表.链表;
/**
 * 测试单向链表
 * @author wangcong
 * @date 2021/11/17 22:36:51
 * @update 2021/11/17 22:36
 */
public class SingleListTest {
    public static void main(String[] args) {
        SingleLinkList linkList=new SingleLinkList();
        HeroNode heroNode1=new HeroNode(1,"肖战","小兔子");
        HeroNode heroNode2=new HeroNode(5,"王一博","老虎");
        HeroNode heroNode3=new HeroNode(6,"战战","11");
        HeroNode heroNode4=new HeroNode(9,"肖1战","11小兔子");
        HeroNode heroNode5=new HeroNode(21,"22肖战","22小兔子");
        /*linkList.addHero(heroNode1);
        linkList.addHero(heroNode2);
        linkList.addHero(heroNode3);
        linkList.addHero(heroNode4);
        linkList.addHero(heroNode5);*/
        linkList.addOrder(heroNode1);
        linkList.addOrder(heroNode2);
        linkList.addOrder(heroNode3);
        linkList.addOrder(heroNode4);
        linkList.addOrder(heroNode5);
        linkList.list();
        System.out.println("---------------------------");
        linkList.updateNode(new HeroNode(9,"王长春","纯粹"));
        linkList.list();
        System.out.println("---------------------------");
        linkList.deleteNode(9);
        linkList.list();
    }
}
输出:

HeroNode{no=0, name='', nickName='', next=HeroNode{no=1, name='肖战', nickName='小兔子', next=HeroNode{no=5, name='王一博', nickName='老虎', next=HeroNode{no=6, name='战战', nickName='11', next=HeroNode{no=9, name='肖1战', nickName='11小兔子', next=HeroNode{no=21, name='22肖战', nickName='22小兔子', next=null}}}}}}
HeroNode{no=1, name='肖战', nickName='小兔子', next=HeroNode{no=5, name='王一博', nickName='老虎', next=HeroNode{no=6, name='战战', nickName='11', next=HeroNode{no=9, name='肖1战', nickName='11小兔子', next=HeroNode{no=21, name='22肖战', nickName='22小兔子', next=null}}}}}
HeroNode{no=5, name='王一博', nickName='老虎', next=HeroNode{no=6, name='战战', nickName='11', next=HeroNode{no=9, name='肖1战', nickName='11小兔子', next=HeroNode{no=21, name='22肖战', nickName='22小兔子', next=null}}}}
HeroNode{no=6, name='战战', nickName='11', next=HeroNode{no=9, name='肖1战', nickName='11小兔子', next=HeroNode{no=21, name='22肖战', nickName='22小兔子', next=null}}}
HeroNode{no=9, name='肖1战', nickName='11小兔子', next=HeroNode{no=21, name='22肖战', nickName='22小兔子', next=null}}
HeroNode{no=21, name='22肖战', nickName='22小兔子', next=null}
---------------------------
HeroNode{no=0, name='', nickName='', next=HeroNode{no=1, name='肖战', nickName='小兔子', next=HeroNode{no=5, name='王一博', nickName='老虎', next=HeroNode{no=6, name='战战', nickName='11', next=HeroNode{no=9, name='王长春', nickName='纯粹', next=HeroNode{no=21, name='22肖战', nickName='22小兔子', next=null}}}}}}
HeroNode{no=1, name='肖战', nickName='小兔子', next=HeroNode{no=5, name='王一博', nickName='老虎', next=HeroNode{no=6, name='战战', nickName='11', next=HeroNode{no=9, name='王长春', nickName='纯粹', next=HeroNode{no=21, name='22肖战', nickName='22小兔子', next=null}}}}}
HeroNode{no=5, name='王一博', nickName='老虎', next=HeroNode{no=6, name='战战', nickName='11', next=HeroNode{no=9, name='王长春', nickName='纯粹', next=HeroNode{no=21, name='22肖战', nickName='22小兔子', next=null}}}}
HeroNode{no=6, name='战战', nickName='11', next=HeroNode{no=9, name='王长春', nickName='纯粹', next=HeroNode{no=21, name='22肖战', nickName='22小兔子', next=null}}}
HeroNode{no=9, name='王长春', nickName='纯粹', next=HeroNode{no=21, name='22肖战', nickName='22小兔子', next=null}}
HeroNode{no=21, name='22肖战', nickName='22小兔子', next=null}
---------------------------
HeroNode{no=0, name='', nickName='', next=HeroNode{no=1, name='肖战', nickName='小兔子', next=HeroNode{no=5, name='王一博', nickName='老虎', next=HeroNode{no=6, name='战战', nickName='11', next=HeroNode{no=21, name='22肖战', nickName='22小兔子', next=null}}}}}
HeroNode{no=1, name='肖战', nickName='小兔子', next=HeroNode{no=5, name='王一博', nickName='老虎', next=HeroNode{no=6, name='战战', nickName='11', next=HeroNode{no=21, name='22肖战', nickName='22小兔子', next=null}}}}
HeroNode{no=5, name='王一博', nickName='老虎', next=HeroNode{no=6, name='战战', nickName='11', next=HeroNode{no=21, name='22肖战', nickName='22小兔子', next=null}}}
HeroNode{no=6, name='战战', nickName='11', next=HeroNode{no=21, name='22肖战', nickName='22小兔子', next=null}}
HeroNode{no=21, name='22肖战', nickName='22小兔子', next=null}
Process finished with exit code 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值