java 链表

链表介绍:

链表可以有头节点、也可以没有头节点,按照实际需要来定义
链表是一个有序的列表,有头节点的链表在内存的分布是这样的:
在这里插入图片描述

  1. 链表是以节点的方式来存储的
  2. 每个节点包含data域来存数据、next域则是指向下一个节点的
  3. 链表的各个节点不一定是连续存放的

单链表的逻辑结构:

逻辑分析的时候可以如此分析,若下一个为null则此链表结束
在这里插入图片描述
一个实例:水浒传英雄的录入(没有排序):

public class SingleLink {
    public static void main(String[] args) {
        HeroNode heroNode1 = new HeroNode(0,"宋江","及时雨");
        HeroNode heroNode2 = new HeroNode(1,"卢俊义","玉麒麟");
        HeroNode heroNode3 = new HeroNode(2,"吴用","智多星");
        HeroNode heroNode4 = new HeroNode(3,"林冲","豹子头");
        LiskListHeroNode liskListHeroNode = new LiskListHeroNode();
        liskListHeroNode.add(heroNode1);
        liskListHeroNode.add(heroNode2);
        liskListHeroNode.add(heroNode3);
        liskListHeroNode.add(heroNode4);
        liskListHeroNode.showNode();
    }
}
//管理HeroNode的链表
class LiskListHeroNode{
    //初始化一个头节点,不动不存放数据
    private  HeroNode hero = new HeroNode(0,"","");
    //添加单向链表:直接在链表的最后添加不考虑排序的问题
    public void add(HeroNode heroNode){
        //定义一个临时的节点,代替头节点进行遍历
        HeroNode temp = hero;
        while (true){
            //判断下一个节点是否为空
            if (temp.next == null){
                break;
            }else {
                //如果下一个节点不为空则表明这不是最后一个节点
                temp = temp.next;
            }
        }
        //while结束之后,那么这个temp就是最后这个链表的指向,直接将其指向新节点即可
        temp.next = heroNode;
    }
    //显示链表
    public void showNode(){
        //如果下一个节点为空就直接结束否则就将下一个节点赋值给临时变量
        if (hero.next == null){
            System.out.println("链表为空");
            return;
        }
        HeroNode temp = hero.next;
        //这里表示头节点的下一个并不为空,那么开始遍历
        while (true){
            //链表结束
            if (temp == null){
               return;
            }else {
                System.out.println(temp);
                temp = temp.next;
            }
        }
    }
}


//单个英雄的信息
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;
    }
    //显示单个英雄信息的方法

    @Override
    public String toString() {
        //若将next也重写那么会直接从此节点一直打到最后那个为null的节点
        return "HeroNode{" + "no=" + no + ", name='" + name + '\'' + ", nickName='" + nickName + '\''+'}';
    }
}


在这里插入图片描述在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值