Java数据结构-单链表

该文描述了一个使用Java实现的单链表数据结构,支持尾插法和头插法添加结点,并能遍历输出链表内容。用户可以选择添加结点、遍历链表或退出程序。链表的插入操作强调了需要定位到前一个结点,并提供了清晰的操作步骤。

注意:

单链表,需要定位在需要进行操作的前一个结点

1、通过数组,实现单链表功能

2、尾插法:

1)通过遍历,达到末尾的前一个元素

2)temp.next == null;

3、头插法

1)直接插入到头指针的下一个位置

2)并把原来的链表接在新的结点的后方

注意:先将原来的链表接在新的结点上,再将新结点接在头结点的后面(先右再左)

4、遍历结点

1)通过循环遍历,输出结点

2)结束条件为temp.next == null



import java.util.ArrayList;
import java.util.Scanner;

public class LinkList {
    public static void main(String[] args) {
        SingleLinkedList singleLinkedList = new SingleLinkedList();
        Scanner s = new Scanner(System.in);
        ArrayList<String> arrayList = new ArrayList<>();
        boolean flag = true;
        while(flag){
            System.out.println("a(add)添加结点");
            System.out.println("l(list)遍历结点");
            System.out.println("e(exit)退出程序");
            System.out.println("请选择你的操作:");
            String key = s.next();
            switch (key){
                case "a":{
                    arrayList.clear();
                    // 创建结点
                    System.out.println("请分别输入结点的信息: ");
                    for (int i = 0; i < 3; i++) {

                        arrayList.add(s.next());
                    }
//            int i = s.nextInt();
//            String n = s.next();
//            String nickname = s.next();
                    HeroNode heroNode = new HeroNode(arrayList.get(0),arrayList.get(1),arrayList.get(2));
                    singleLinkedList.add(heroNode);
                    break;

                }
                case "l":{

                    singleLinkedList.list();
                    System.out.println();
                    break;


                }
                case "e":{
                    s.close();
                    flag = false;
                    break;

                }

            }



        }


    }
}
// 定义管理英雄的
class SingleLinkedList{
    // 初始化一个头节点,头节点不要动,不存放任何的数据
    private HeroNode head = new HeroNode("0","",""); // 创建头结点 0,“”, “”
    // 尾插法
    public void add(HeroNode heroNode){
        // 辅助变量
        HeroNode temp = head;

        // 遍历,直到最后尾部
        while(true){
            if(temp.next == null){
                break;
            }
            temp = temp.next;
        }
        // 到达最后一个指针
        temp.next = heroNode;

    }
    // 显示链表[遍历]
    public void list(){
        HeroNode temp = head;
        if((temp.next)==null){
            System.out.println("空链表");
            return;

        }
        while(temp.next!=null){
            temp = temp.next;  // 有头指针
            System.out.println(temp.toString());// 输出结点中的信息

        }
    }

}
// 英雄类的结点
class HeroNode {
    public String no;// 编号
    public String name;// 名字
    public String nickname; // 称号
    public HeroNode next;  // 下一个结点


    public HeroNode(String n, String name, String nickname) {
        this.no = n;
        this.name = name;
        this.nickname = nickname;
    }

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值