栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java实现单向链表

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java实现单向链表

顺序单向链表

顺序单向链表是一种数据结构,由一个个节点构成,前一个节点指向后一个节点,没有节点指向头节点,即每个节点都有下个节点的内存地址。随机增删改效率高,查询效率低。

代码实现
public class LinkedListTest {
    
    public static void main(String[] args) {
        SingleLinkedList sll = new SingleLinkedList();
        //往链表中添加英雄
        sll.add(new Hero(1,"亚索","疾风剑豪"));
        sll.add(new Hero(3,"李青","盲僧"));
        sll.add(new Hero(2,"艾克","时间刺客"));
        sll.outputs();
        //查询英雄信息
        sll.select(3);
        //修改英雄信息
        sll.update(3,new Hero(3,"盖伦","德玛西亚之力"));
        sll.outputs();
        //删除英雄
        sll.delete(2);
        sll.outputs();
        sll.add(new Hero(2,"卡莎","虚空之女"));
        sll.add(new Hero(4,"照信","德邦总管"));
        sll.outputs();


    }
}

class SingleLinkedList{
    //头节点
    private Hero header = new Hero(0,"","");

    //添加英雄的方法
    public void add(Hero hero){
        //当链表为空时,直接添加在头节点后面
        if (header.next == null) {
            header.next = hero;
            return;
        }
        //链表不为空,通过头节点遍历链表,找到尾节点后添加
        //创建一个临时节点来指向头节点header的后继节点,遍历链表
        Hero temp = header.next;
        while (true){
            //当temp的指针域为null时,说明此时的temp就是尾节点,然后进行添加节点
            if (temp.next == null) {
                temp.next = hero;
                break;
            }
            //temp的指针域不为null,接着寻找尾节点,temp后移
            temp = temp.next;
        }
    }

    //删除英雄的方法
    public void delete(int no){
        //链表为空时,无法删除链表
        if (header.next == null) {
            System.out.println("链表为空,无法删除节点!");
            return;
        }
        //链表不为空,遍历节点,找到节点的编号与传入的no相等的节点的前一个节点,然后进行删除节点操作
        //创建一个临时节点,来遍历链表
        Hero temp = header;
        while (true){
            //将传入的no 和temp.next.no 进行比对,找到要删除节点的前一个节点
            if (temp.next.no == no) {
                //删除节点操作
                System.out.println("成功删除英雄--->" + temp.next);
                temp.next = temp.next.next;
                break;
            }
            //如果遍历到尾节点仍然没有找到符合条件的英雄,则说明要删除的英雄不在链表中
            if (temp.next == null) {
                System.out.println("该链表不存在您要删除的英雄!");
            }
            //temp后移以遍历所有节点
            temp = temp.next;
        }
    }

    //修改英雄信息的方法
    public void update(int no,Hero hero){
        //链表为空时,无法修改英雄信息
        if (header.next == null) {
            System.out.println("链表为空,无法修改英雄信息");
            return;
        }
        //链表不为空,遍历英雄节点,找到英雄节点的编号与传入的no相等的英雄节点的前一个英雄节点,然后进行修改节点操作
        //创建一个临时英雄节点,来遍历链表
        Hero temp = header;
        while (true){
            //将传入的no 和temp.next.no 进行比对,找到要修改的英雄节点的下一个英雄节点
            if (temp.next.no == no) {
                //修改英雄节点操作
                System.out.println("当前英雄节点" + temp.next + "信息已经被修改");
                hero.next = temp.next.next;
                temp.next = hero;
                System.out.println("修改后的英雄信息为:" + temp.next);
                break;
            }
            //如果遍历到尾节点仍然没有找到符合条件的英雄,则说明要删除的英雄不在链表中
            if (temp.next == null) {
                System.out.println("该链表不存在您要修改的英雄!");
            }
            //temp后移以遍历所有节点
            temp = temp.next;
        }
    }

    //通过英雄的编号去查找英雄的信息
    public void select(int no){
        //链表为空时,没有英雄信息
        if (header.next == null) {
            System.out.println("链表为空,无法修改英雄信息");
            return;
        }
        //链表不为空,通过临时节点遍历链表,对比no查找英雄
        Hero temp = header.next;
        while (true){
            //对比编号查找英雄
            if (temp.no == no) {
                System.out.println("您要查找的英雄信息为:" + temp);
                break;
            }
            //当遍历到尾节点时,仍然没有查找到该英雄,则说明该英雄不在该链表中
            if (temp.next == null) {
                System.out.println("您要查找的英雄不在该链表中");
            }
            //temp后移以遍历所有节点
            temp = temp.next;
        }
    }

    //打印链表中所以英雄的信息
    public void outputs(){
        //链表为空时,没有英雄信息
        if (header.next == null) {
            System.out.println("链表为空,没有英雄信息");
            return;
        }
        //链表不为空,通过临时节点遍历链表
        Hero temp = header.next;
        while (true){
            if (temp.next == null) {
                System.out.println(temp);
                break;
            }
            System.out.println(temp);
            temp = temp.next;
        }
    }


}
class Hero{
    //英雄编号:
    public int no;
    //英雄名字:
    public String name;
    //英雄昵称:
    public String nickname;
    //指向后继英雄的指针:
    public Hero next;

    public Hero(int no, String name, String nickname) {
        this.no = no;
        this.name = name;
        this.nickname = nickname;
    }

    @Override
    public String toString() {
        return "Hero{" +
                "no=" + no +
                ", name='" + name + ''' +
                ", nickname='" + nickname + ''' +
                '}';
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/985856.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号