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
相关产品推荐
相关产品推荐

