ZYa222999 2024-03-04 20:25 采纳率: 33.3%
浏览 4
已结题

java单向链表问题


package com.atzy.LinkedList;

public class SingleLinkedListDemo {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //测试
        PersonNode person1 = new PersonNode(1,"小明",10);
        SingleLinkedList list1 = new SingleLinkedList();
        list1.AddPerson(person1);
        list1.ShowList();
    }

}

class SingleLinkedList{
    //头节点
    private PersonNode headNode = new PersonNode(0, "", 0);//为什么要用private?
    //添加节点到单链表中
    public void AddPerson(PersonNode personNode){
        PersonNode temp = headNode;//头节点不能动,所以定义一个temp遍历单链表
        while(true) {
            if(temp.next == null) {
                break;
            }
            temp = temp.next;
        }
        temp.next = personNode;
        
    }
    public void ShowList(){
        if(headNode.next == null) {
            System.out.println("链表为空");
        }
        PersonNode temp = headNode.next;
        while(true) {
            if(temp == null) {
                break;
            }
            System.out.println(temp);
            temp = temp.next;
        }
        
    }
}

class PersonNode{
    public int num;
    public String name;
    public int age;
    public PersonNode next;
    
    //创建构造器——单链表
    public PersonNode(int pNum,String pName,int pAge){
        this.num = pNum;
        this.name = pName;
        this.age = pAge;
        
    }
    
}

请问一下为什么运行出来没有结果呀?谢谢~

  • 写回答

4条回答 默认 最新

  • 关注

    ZYa222999 晚上好🌙🌙🌙
    本答案参考ChatGPT-3.5

    从你的代码中,目前看到一个问题是没有在PersonNode类中重写toString()方法。在ShowList()方法中,你尝试打印PersonNode对象时会调用其默认的toString()方法,该方法会返回对象的内存地址而不会打印出具体的属性值。因此,你需要在PersonNode类中添加toString()方法来返回对象属性的具体值。

    解决方案如下:

    1. 在PersonNode类中添加toString()方法,返回对象属性的具体值。
    2. 修改ShowList()方法中的打印语句,使用temp对象调用toString()方法来打印具体的属性值。
    3. 运行程序,输出链表中的节点信息。

    修改后的代码如下:

    package com.atzy.LinkedList;
    
    public class SingleLinkedListDemo {
    
        public static void main(String[] args) {
            //测试
            PersonNode person1 = new PersonNode(1, "小明", 10);
            SingleLinkedList list1 = new SingleLinkedList();
            list1.AddPerson(person1);
            list1.ShowList();
        }
    
    }
    
    class SingleLinkedList {
        //头节点
        private PersonNode headNode = new PersonNode(0, "", 0);
    
        //添加节点到单链表中
        public void AddPerson(PersonNode personNode) {
            PersonNode temp = headNode;
            while (true) {
                if (temp.next == null) {
                    break;
                }
                temp = temp.next;
            }
            temp.next = personNode;
    
        }
    
        public void ShowList() {
            if (headNode.next == null) {
                System.out.println("链表为空");
                return;
            }
            PersonNode temp = headNode.next;
            while (temp != null) {
                System.out.println(temp);
                temp = temp.next;
            }
    
        }
    }
    
    class PersonNode {
        public int num;
        public String name;
        public int age;
        public PersonNode next;
    
        //创建构造器
        public PersonNode(int num, String name, int age) {
            this.num = num;
            this.name = name;
            this.age = age;
        }
    
        @Override
        public String toString() {
            return "PersonNode{" +
                    "num=" + num +
                    ", name='" + name + '\'' +
                    ", age=" + age +
                    '}';
        }
    }
    

    修改后的代码中,我们在PersonNode类中添加了toString()方法,并在ShowList()方法中使用temp对象调用该方法来打印节点的属性值。这样,运行程序就能正确输出链表中的节点信息了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 3月12日
  • 已采纳回答 3月4日
  • 创建了问题 3月4日

悬赏问题

  • ¥20 指导如何跑通以下两个Github代码
  • ¥15 大家知道这个后备文件怎么删吗,为啥这些文件我只看到一份,没有后备呀
  • ¥15 C++为什么这个代码没报错运行不出来啊
  • ¥15 一道ban了很多东西的pyjail题
  • ¥15 关于#r语言#的问题:如何将生成的四幅图排在一起,且对变量的赋值进行更改,让组合的图漂亮、美观@(相关搜索:森林图)
  • ¥15 C++识别堆叠物体异常
  • ¥15 微软硬件驱动认证账号申请
  • ¥15 GPT写作提示指令词
  • ¥20 根据动态演化博弈支付矩阵完成复制动态方程求解和演化相图分析等
  • ¥15 华为超融合部署环境下RedHat虚拟机分区扩容问题