Java如何使用toString()打印整数链表?为何我的程序无输出?
问题原因
你的程序没有输出和toString()里的val != null判断没有关系,问题完全出在构造方法的实现上:
- 你在
IntList构造方法中创建的是Java标准库自带的java.util.LinkedList临时对象,这个对象和你自定义的IntList的链表结构没有任何关联,构造方法执行完这个临时对象就会被回收。 - 你自定义的
IntList的核心成员head从头到尾都没有被赋值,一直保持默认的null值。toString()方法遍历的时候,初始的val就是head也就是null,循环一次都不会执行,最终返回空字符串,所以控制台没有任何内容输出。
修复方案
把构造方法改成直接操作你自己定义的Node节点来构建链表即可,参考代码:
public IntList(int n) { if (n <= 0) { head = null; return; } Random rand = new Random(); // 初始化头节点 head = new Node(); head.value = rand.nextInt(n); Node current = head; // 构建剩余n-1个节点 for (int i = 1; i < n; i++) { Node nextNode = new Node(); nextNode.value = rand.nextInt(n); current.next = nextNode; current = nextNode; } }
可选优化
如果链表长度较长,建议toString()方法用StringBuilder拼接字符串,避免频繁创建字符串对象带来的性能损耗:
public String toString() { StringBuilder sb = new StringBuilder(); for(IntList.Node val = head; val != null; val = val.next) { sb.append(val.value); // 可以加个分隔符输出更清晰,比如 sb.append(" "); } return sb.toString(); }
内容的提问来源于stack exchange,提问作者kafkashores
相关产品推荐
相关产品推荐

