数据结构:单链表初步学习1(顺序链表)

模拟单链表的创建使用过程!

首先,链表分为顺序存储结构和链式存储结构。接下来,第一天我们初步讲解链表的介绍,以及代码模拟方法和特点;在这里插入图片描述
如上图的逻辑图,我们小结一番:

  1. 链表以节点的方式存储
  2. 每个链表包含data(数据域)和next(指针域),指针域就是指向下一个节点
  3. 链表中的各个节点不一定是连续存储的
  4. 链表可以有表头(head)也可以不要,根据自己情况决定。

接着我们代码模拟一下:

package com.pengmeng.linkedList;

public class SingLinkedListDemo {
    //测试
    public static void main(String[] args) {
        //先创建节点
        HeroNode h1 = new HeroNode(1, "宋江", "及时雨");
        HeroNode h2 = new HeroNode(2, "卢俊义", "玉麒麟");
        HeroNode h3 = new HeroNode(3, "吴用", "智多星");
        HeroNode h4 = new HeroNode(4, "林冲", "豹子头");
        //加入SingLinkedList(单链表)
        SingLinkedList singLinkedList = new SingLinkedList();
        singLinkedList.add(h1);
        singLinkedList.add(h2);
        singLinkedList.add(h3);
        singLinkedList.add(h4);
        //显示
        singLinkedList.list();
    }
}

/**
 * 定义一个SingLinkedList来管理英雄人物,成为单链表
 */
class SingLinkedList{
    //初始化一个头节点,头节点不要动,动了就不找不到列表了(没有具体的数子)
    private HeroNode head = new HeroNode(0,"","");

    //添加方法(把节点添加到这个singlinkedlist列表)
    //思路分析:先找到当前链表的最后一个节点,然后把最后节点的next域指向新的节点(不考虑排序的情况下)
    public void add(HeroNode heroNode){
        //1 需要一个辅助节点(temp)遍历,因为头节点不可以用
        HeroNode temp = head;
        //2 遍历
        while (true){
            // 当 next域是null的时候就是最后一个
            if (temp.next == null){
                break;
            }
            //没有找到,就接着移动查找
            temp = temp.next;
        }
        // 当退出while循环的时候,temp就是指向链表的最后(把新的节点添加进去)
        temp.next = heroNode;
    }

    // 显示链表 思路:遍历
    public void list(){
        //0 判断链表是否为空,也就是head.next == null  head是头节点
        if (head.next == null){
            System.out.println("链表为空");
            return;
        }
        //1 同样需要一个辅助节点(temp)遍历,因为头节点不可以用
        HeroNode temp = head.next;
        //2 遍历
        while (true){
            //判断是否到最后了,也就是 next域 = null 也就是temp
            if (temp == null){
                break;
            }
            // 速出节点的信息
            System.out.println(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;
    }

    @Override
    public String toString() {
        return "HeroNode{" +
                "no=" + no +
                ", name='" + name + '\'' +
                ", nickName='" + nickName + '\'' +
                '}';
    }
}

运行结果:

在这里插入图片描述

不知道大家发现了没有,这其中有个小问题,就是链表的顺序无法排序,插入的顺序就是排序的顺序,那么如何做到不管插入的顺序都根据no排序呢?请看下一次的链表学习2

如果本文对你有帮助,请动动小手点个赞,谢谢!
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值