单链表的创建和增删改查实现

Posted z啵唧啵唧

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单链表的创建和增删改查实现相关的知识,希望对你有一定的参考价值。

节点类的定义

/*
* 节点类,用来定义结点的信息和引用
* */
class Hero_Node
    private int no;
    private String name;
    private String Hname;
    Hero_Node Next_hero;

    public Hero_Node(int no, String name, String hname) 
        this.no = no;
        this.name = name;
        Hname = hname;
    

    @Override
    public String toString() 
        return "Hero_Node" +
                "no=" + no +
                ", name='" + name + '\\'' +
                ", Hname='" + Hname + '\\'' +
                '';
    

单链表类

/*
* 单链表类,在这里对单链表进行初始化,定义头节点,对单链表的添加和遍历单链表
* */
class Singlelinkedlist

    Hero_Node Head_node = new Hero_Node(0,null,null);//初始化一个头节点

    /*
    * 添加节点,传的残数就是我们要进行插入的节点
    * */
    public void add(Hero_Node hero)
    
        Hero_Node temp = Head_node; //因为头节点不方便移送,所以先让一个工具节点等于头节点让他进行移动
        while (true)
        
            //因为要插入节点,采用的是尾插法,所以先要判断头节点的后面是否为空,为空就进行插入
            if (temp.Next_hero==null)
            
                temp.Next_hero=hero;
                //因为在一个死循环的循环体当中,所以插入成功之后一定要记得break,跳出循环
                break;
            
            //不为空就进行遍历,直到找到找到链表的尾部
            else
                temp=temp.Next_hero;
            
        
    
    /*
    * 遍历单链表
    * */
    public void See()
    
        /*
        * 也是先定义一个temp工具节点指向头节点
        * */
        Hero_Node temp = Head_node;
        while (true)
        
            /*
            * 当前节点不为空的时候就将它的信息打印出来,然后再将当前节点指向下一节点,实现遍历输出
            * */
            if (temp.Next_hero!=null)
            
                System.out.println(temp.Next_hero);
                temp=temp.Next_hero;
            
            /*
            * 当当前节点位空的时候就说明走到最后一个节点了,那么我们就跳出这个死循环
            * */
            else 
                break;
            
        
    


按照顺序向单链表中添加元素
    /*
    * 通过排序进行添加
    * */
    public void addByOrder(Hero_Node hero)
    
        Hero_Node temp = Head_node ;
        boolean tag = false;
        /*
        * 遍历来进行比较插入
        * */
        while (true)
        
            if(temp.Next_hero==null)
            
                break;
            
            if(temp.Next_hero.getNo()>hero.getNo())
            
               break;
            else if(temp.Next_hero.getNo()==hero.getNo()) //说明编号存在
                tag = true;
                break;
            else 
                /*
                * 如果上面的条件都没有满足就说明还没有找到适合插入的位置,就让这个工具节点向后遍历
                * */
                temp=temp.Next_hero;
            
        

        if (tag)
        
            System.out.println("插入的位置编号"+hero.getNo()+"已经存在");
        else //说明找到了想要添加的位置
            /*
            * 1、让插入进来的节点指向原先temp节点的指向
            * 2、然后让temp执行新插入进来的节点
            * */
            hero.Next_hero=temp.Next_hero;
            temp.Next_hero=hero;
        

    
对节点信息进行修改
    /*
    * 对单链表的修改功能编写
    * */
    public void upDate(Hero_Node newhero)
    
        /*
        * 1、先拿到一个工具节点,指向头节点
        * */
        Hero_Node temp = Head_node;
        /*
        * 2、遍历找出需要修改的节点
        * */
        while (true)
        
            /*
            * 3、找到了就对他进行修改
            * */
            if(temp.Next_hero==null) 
                System.out.println("不存在节点编号为"+newhero.getNo()+"的节点");
                break;
            

            else if(temp.Next_hero.getNo()==newhero.getNo())
            
                temp.Next_hero.setName(newhero.getName());
                temp.Next_hero.setHname(newhero.getHname());
                break;
            
            else 
                /*
                * 4、找不到就继续向后遍历
                * */
                temp=temp.Next_hero;
            
        

    
对节点进行删除
    /*
    * 对单链表的删除功能进行编写
    * */
    public void delete(int no)
    
        Hero_Node temp = Head_node;
        while (true)
        
            if (temp.Next_hero==null)
            
                System.out.println("删除的编号为"+no+"的英雄不存在");
                break;
            
            else if(temp.Next_hero.getNo()==no)
            
                /*
                * 如果temp的下一个节点就是我们想要删除的节点,那么我们就让temp这个节点直接指向temp节点下一节点的下一节点,越过了这个删除的这个节点
                * 当被删除的这个节点没有节点指向她的时候,jvm当中的垃圾回收机制就会将这个节点进行清理
                * */
                temp.Next_hero=temp.Next_hero.Next_hero;
                break;
            
            else 
                temp=temp.Next_hero;
            
        
    

以上是关于单链表的创建和增删改查实现的主要内容,如果未能解决你的问题,请参考以下文章

python实现单链表的增删改查

python实现单链表的增删改查

c语言 建立一个链表,实现增删改查

MySQL — 关键字和增删改查

数据库的创建和增删改查,外键和主键的创建

单链表的增删改查(进阶版)