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

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;
            }
        }
    }

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

单表的增删改查实例(图书管理 系统)

单链表的链式存储总结

yii2.0增删改查实例讲解

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

算法与数据结构单链表的增删改查逆序打印与输出合并有序链表

一文带你吃透JSP,增删改查实战案例详细解读