数据结构-单链表-周末出去玩

出去玩

1、本来是周五下午就出去玩
2、不过因为闺蜜周六有考试呢,所以就放在周六吧
3、都计划了很多事情,这周就统统实现了去

南香香

上篇文章就不公开了,不过呢,这周天晚上我更新下文章,我们出去玩拍的照片,专门在写一篇文章

数据结构-单链表

package com.xiaonan.linkedlist;

public class SingleLinkedListDemo {
    public static void main(String[] args) {
        //HeroNode heroNode1=new HeroNode(1,"11","111");
        //HeroNode heroNode2=new HeroNode(2,"11","111");
        //HeroNode heroNode3=new HeroNode(3,"11","111");
        //HeroNode heroNode4=new HeroNode(4,"11","111");
        //HeroNode heroNode5=new HeroNode(5,"11","111");
        //SingleLinkedList singleLinkedList=new SingleLinkedList();
        //singleLinkedList.add(heroNode1);
        //singleLinkedList.add(heroNode2);
        //singleLinkedList.add(heroNode3);
        //singleLinkedList.add(heroNode4);
        //singleLinkedList.addbyorder(heroNode1);
        //singleLinkedList.addbyorder(heroNode3);
        //singleLinkedList.addbyorder(heroNode2);
        //singleLinkedList.addbyorder(heroNode4);
        //singleLinkedList.list();
        //singleLinkedList.addbyorder(heroNode1);
        //singleLinkedList.addbyorder(heroNode5);
        //singleLinkedList.list();
        //HeroNode heroNode5=new HeroNode(3,"33","333");
        //singleLinkedList.delete(heroNode5);
        //singleLinkedList.list();

    }

}


//定义一个SingleLinkedList,管理英雄
class SingleLinkedList{
    //先初始化一个头节点,头节点不要动,不存放数据
    private HeroNode head=new HeroNode(0," ","");

    //添加
    //思路:不考虑编号顺序
    //1:找到当前链表的最后节点
    //2:将最后这个节点的next指向新节点
    public void add(HeroNode heroNode){
        //因为head节点不能动,因此我们需要一个辅助变量 temp
        HeroNode temp=head;
        //遍历链表 到最后
        while(true){
            if(temp.next==null){
                break;
            }
            //如果没有找到,那我们就后移
            temp=temp.next;
        }
        //当退出while的时候,temp就指向了最后
        temp.next=heroNode;
    }



    //第二种添加方式,根据排名将英雄添加到指定位置
    //如果有这个排名,则添加失败,并给出提示
    public void addbyorder(HeroNode heroNode){
        //头节点不能动,所以必须通过一个辅助变量
        HeroNode temp=head;
        Boolean flag=false;//标志添加的编号是否存在 默认为false
        while(true){
            if(temp.next==null){
                //链表已经到最后了
                break;
            }
            if(temp.next.no>heroNode.no){
                break;
            }else if(temp.next.no==heroNode.no){
                //编号存在
                flag=true;
                break;
            }
            temp=temp.next;
        }

        //判断false的值
        if(flag){
            //编号存在
            System.out.println("准备插入的英雄"+heroNode+"存在");
        }else{
            //插入到链表中
            heroNode.next=temp.next;
            temp.next=heroNode;
        }
    }


    //修改节点的信息,根据No编号来修改,即no编号不能修改
    public void update(HeroNode heroNode){
        //判断是否为空
        if(head.next==null){
            System.out.println("链表为空");
            return;
        }
        HeroNode temp=head.next;
        //寻找no编号的节点
        //Boolean flag=false;//标志添加的编号是否存在 默认为false
        while(true){
            if (temp==null){
               break;
            }
            if(temp.no==heroNode.no){
                //找到了
                //flag=true;
                temp.name= heroNode.name;
                temp.nickname= heroNode.nickname;
                break;
            }
            temp=temp.next;
        }

    }


    public void delete(HeroNode heroNode){
        HeroNode temp=head;
        //寻找no编号的节点
        while(true){
            if(temp.next==null){
                break;
            }
            if(temp.next.no==heroNode.no){
               temp.next=temp.next.next;
               break;
            }
            temp=temp.next;
        }


    }


    public void list(){
        //先判断是否为空
        if(head.next==null){
            System.out.println("链表为空");
            return;
        }
        //因为头节点不能动,所以我们需要一个辅助节点
        HeroNode temp=head.next;
        while(true){
            if(temp==null){
                break;
            }
            //输出节点的信息
            System.out.println(temp);
            //temp后移
            temp=temp.next;
        }
    }


}

//定义一个HeroNode 每一个HeroNOde对象就是一个节点
class HeroNode{
    public int no;
    public String name;
    public String nickname;
    public HeroNode next; //指向下一个节点

    public HeroNode(int no, String name, String nickname) {
        this.no = no;
        this.name = name;
        this.nickname = nickname;
        this.next = next;
    }
    @Override
    public String toString() {
        return "HeroNode{" +
                "no=" + no +
                ", name='" + name + '\'' +
                ", nickname='" + nickname + '\'' +
                '}';
    }
}

注意

1、单链表操作其实就是节点节点之间操作
2、修改与查找(我这里没有写),这俩比较简单
3、添加(顺序添加)和删除,这俩模块比较可能绕点。不过我把重点代码贴在下面
4、添加条件temp.next.no>heroNode.no,实现代码heroNode.next=temp.next;temp.next=heroNode;
5、删除条件temp.next.no==heroNode.no,实现代码temp.next=temp.next.next;
6、大家都发现了吧,添加和修改都是当前节点的下一个节点去操作

评论区
头像