快捷搜索: 王者荣耀 脱发

数据结构--单链表的创建和遍历

链表介绍

代码实现(单链表的创建和遍历)

import java.util.Scanner;


public class SingleLinkedListDemo {
          
   
    public static void main(String[] args) {
          
   

        SingleLinkedList singleLinkedList = new SingleLinkedList();
        boolean tar = true;
        while(tar){
          
   
            System.out.println("请选择你要执行的操作,add:往链表中添加数据  show:遍历整个链表 quit:退出程序");
            Scanner sc = new Scanner(System.in);
            String str = sc.next();
            switch(str){
          
   
                case "add" :
                    System.out.println("请输入新节点的序号:");
                    int no = sc.nextInt();
                    System.out.println("请输入新节点的名字:");
                    String name = sc.next();
                    System.out.println("请输入新节点的昵称:");
                    String nickName = sc.next();
                    HeroNode newNode = new HeroNode(no, name, nickName);
                    singleLinkedList.add(newNode);
                    break;

                case "show" :
                    singleLinkedList.list();
                    break;

                case "quit" :
                    tar = false;
                    break;
            }
        }


    }
}


//定义SingleLinkedList,管理我们的英雄
class SingleLinkedList{
          
   

    //先初始化一个头节点,头节点不要动,不存放具体的数据
    public HeroNode head = new HeroNode(0,"","");

    //添加节点到单向链表
    //思路:当不考虑编号顺序时
    //1. 找到当前链表的最后节点
    //2. 将最后这个节点的next 指向 新的节点
    public void add(HeroNode heroNode){
          
   

        // 因为head节点不能动,因此我们需要一个辅助遍历temp
        HeroNode temp = head;

        //遍历链表,找到最后
        while(true){
          
   
            if(temp.next != null){
          
   
                //如果没有找到最后,将temp后移
                temp = temp.next;
                continue;
            }

            //找到最后,就跳出循环
            break;
        }
        //当退出while循环时,temp就指向了链表的最后
        //将最后这个节点的next 指向 新的节点
        temp.next = heroNode;

    }


    //显示链表【遍历】
    public void list(){
          
   

        //判断链表是否为空
        if(head.next == null){
          
   
            throw new RuntimeException("链表为空,没有数据,请先添加数据再打印");
        }

        //因为头节点不能动,因此我们需要一个辅助变量来遍历
        HeroNode temp = head.next;

        while(true){
          
   

            //输出节点的信息
            System.out.println("序号:"+temp.no);
            System.out.println("姓名:"+temp.name);
            System.out.println("昵称:"+temp.nickName);
            System.out.println("-----------------------------------");

            //判断是否到链表最后
            if(temp.next == null){
          
   
                break;
            }

            //将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;
    }
}
经验分享 程序员 微信小程序 职场和发展