You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java实现接收用户输入生成链表后无法正常打印问题求助

问题根因

Java的参数传递是值传递,当你把main方法里的start(此时值为null)传入create方法时,实际上传入的是这个引用的副本。你在create方法内执行start = a,仅仅修改了副本的指向,完全不会影响main方法中原来的start变量,调用完create后main里的start仍然是null,所以display方法遍历的时候直接退出,没有任何输出。

解决方案

推荐最简洁的修改方式:将create方法的返回值从void改成Node,把创建好的链表头节点返回给main方法使用,修改后的完整代码如下:

import java.util.Scanner;
class Node
{
    int data;
    Node next;
}
public class LinkedList
{
    // 修改返回值为Node,返回头节点
    public static Node create()
    {
        Scanner sc = new Scanner(System.in);
        Node start = null;
        Node a = new Node();
        System.out.println("Enter Details:");
        a.data = sc.nextInt();
        a.next = null;
        start = a;
        System.out.println("Do you want to continue(Y/N)?");
        char ch = sc.next().charAt(0);
        while(ch!='n' && ch!='N') // 兼容大写N的输入场景
        {
            Node b = new Node();
            System.out.println("Enter Details:");
            b.data=sc.nextInt();
            b.next = null;
            a.next = b;
            a=b;
            System.out.println("Do you want to continue(Y/N)?");
            ch = sc.next().charAt(0);
        }
        sc.close();
        return start; // 返回创建好的头节点
    }
    public static void display(Node start)
    {
        Node temp = start;
        while(temp!=null)
        {
            System.out.println(temp.data);
            temp = temp.next;
        }
    }
    public static void main(String[] args){
        Node start = create(); // 接收create方法返回的头节点
        display(start);
    }
}

核心修改点

  • 移除了create方法的入参,改为方法内部初始化头节点后返回
  • main方法中不再先声明值为null的start,而是直接接收create的返回值
  • 额外增加了对大写N的判断,避免用户输入大写N时仍然进入循环的问题

内容的提问来源于stack exchange,提问作者Prateek Kumar Mohanty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 14:30:03