余腾

导航

数据结构单向链表的创建与使用小结

package com.yuteng.linkedlist;

/**
 * @version 1.0
 * @author: 余腾
 * @date: 2021-07-22 14:54
 */
public class SingleLinkedListDemo {
    public static void main(String[] args) {

        //进行测试
        //先创建节点
        HeroNode hero1 = new HeroNode(1, "宋江", "及时雨");
        HeroNode hero2 = new HeroNode(2, "卢俊义", "玉麒麟");
        HeroNode hero3 = new HeroNode(3, "吴用", "智多星");
        HeroNode hero4 = new HeroNode(4, "林冲", "豹子头");
        //创建一个链表
        SingleLinkedList list = new SingleLinkedList();
        //加入数据
        list.add(hero1);
        list.add(hero2);
        list.add(hero3);
        list.add(hero4);
        //显示一下
        list.list();

    }
}

/**
 * 定义SingleLinkedList 管理我们的英雄
 */
class SingleLinkedList {
    /**
     * 先初始化一个头节点,头节点不要动,不存放具体的数据
     */
    private HeroNode head = new HeroNode(0, "", "");

    /**
     * 添加节点到单向链表
     * 思路:当不考虑编号顺序时
     * 1.找到当前链表的最后节点
     * 2.将最后这个节点的next指向新的节点即可
     *
     * @param heroNode 你想新建的链表的数据域
     */
    public void add(HeroNode heroNode) {
        //因为Head 节点不能动 因为我们需要一个辅助遍历temp
        HeroNode temp = head;
        //遍历链表,找到最后
        while (true) {
            //找到链表的最后
            if (temp.next == null) {
                break;
            }
            //如果找不到就让temp后移
            else {
                temp = temp.next;
            }
        }
        //当退出while循环时temp指向了链表的最后
        //将最后的这个节点的next指向新的节点
        temp.next = heroNode;
    }

    /**
     * 显示链表[遍历]
     */
    public void list() {
        //判断链表是否位为空
        if (head.next == null) {
            System.out.println("链表为空");
            return;
        }
        //因为头节点不能动因此我们需要一个辅助变量来遍历
        else {
            HeroNode temp = head.next;
            while (true) {
                //判断是否到最后了
                if (temp == null) {
                    break;
                }
                System.out.println(temp);
                //将next后移
                temp = temp.next;
            }
        }
    }
}

/**
 * 定义HeroNode节点,每个HeroNode 对象就是一个节点
 */
class HeroNode {
    public int no;
    public String name;
    public String nickname;
    public HeroNode next;

    public HeroNode(int hNo, String hName, String hNickname) {
        this.name = hName;
        this.no = hNo;
        this.nickname = hNickname;
    }

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

目前进行遍历的数据是根据你添加的顺序进行遍历 如先hero1 后 hero4 就会出现 先打印1 后打印4 然后 2 3

posted on 2021-07-22 15:32  余腾  阅读(44)  评论(0)    收藏  举报

Fork me on Gitee