其他分享
首页 > 其他分享> > 数据结构--单链表的创建和遍历(代码优化)

数据结构--单链表的创建和遍历(代码优化)

作者:互联网

代码优化(基于上一篇博客“数据结构–单链表的创建和遍历”)
本次优化主要体现在add方法和list方法上

import java.util.Scanner;

//单向链表优化
public class CircleLinkedListDemo2 {
    public static void main(String[] args) {
        SingleLinkedList2 singleLinkedList = new SingleLinkedList2();
        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();
                    HeroNode2 newNode = new HeroNode2(no, name, nickName);
                    singleLinkedList.add2(newNode);
                    break;

                case "show" :
                    singleLinkedList.list2(singleLinkedList.head.next);
                    break;

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


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

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

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

    public int count = 0;

    //优化add方法:不用每次都从链表头节点开始遍历找到链表的最后节点
    //每次往链表最后加完节点后,temp则指向链表的最后节点
    public void add2(HeroNode2 heroNode){
        count++;
        if(count == 1){
            head.next = heroNode;
        }
        temp.next = heroNode;
        temp = heroNode;
    }



    //优化list方法,采用 递归 来遍历链表
    public void list2(HeroNode2 headNext){
        if(head.next == null){
            throw new RuntimeException("链表为空,没有数据,请先添加数据再打印");
        }
        System.out.println("序号:"+headNext.no);
        System.out.println("姓名:"+headNext.name);
        System.out.println("昵称:"+headNext.nickName);
        System.out.println("-----------------------------------");

        if(headNext.next != null){
            list2(headNext.next);  //递归
        }
    }
}



//定义HeroNode,每个HeroNode 对象就是个一个节点
class HeroNode2{

    public int no;

    public String name;

    public String nickName;

    public HeroNode2 next;  //指向下一个节点

    //构造器
    public HeroNode2(int no, String name, String nickName){
        this.no = no;
        this.name = name;
        this.nickName = nickName;
    }
}

结果截图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

标签:遍历,--,System,next,链表,代码优化,HeroNode2,节点,public
来源: https://blog.csdn.net/xiaoheijjkjkjk/article/details/112223765