嗨,我在尝试使用递归以相反的顺序打印单链表时遇到了一些麻烦。我看过一些例子,但我的方法不带任何参数。我想按以下格式打印出来:
input: [1, 2, 3, 4, 5] and output:[5, 4, 3, 2, 1]
first 指的是单链表中的第一个节点,我使用 StringBuilder 来构建列表,以便我可以在最后返回它。
这是我到目前为止所拥有的:
public String printReverse() {
StringBuilder myString = new StringBuilder("[");
if (head != null) { // base case
head = head.next;
myString.append(head.value); // line 406
myString.append(", "); // line 407
printReverse(); // line 408
}
myString = myString.append("]");
return myString.toString();
}
我收到以下错误:
Exception in thread "main" java.lang.NullPointerException
at myprog.SLL$Node.access$100(SLL.java:445)
at myprog.SLL.printReverse(SLL.java:406)
at myprog.SLL.printReverse(SLL.java:408)
at myprog.SLL.printReverse(SLL.java:408)
at myprog.SLL.printReverse(SLL.java:408)
at myprog.SLL.printReverse(SLL.java:408)
at myprog.SLLApp.myMethod(SLLApp.java:198)
at myprog.SLLApp.<init>(SLLApp.java:37)
at myprog.SLLApp.main(SLLApp.java:26)
我不明白我做错了什么,但我怀疑这可能是我调用该方法本身的方式。谁能建议我可能做错了什么以及如何解决它?
谢谢!
最佳答案
你把事情搞得太复杂了。我们看一下伪代码:
- 初始节点是头节点
- 如果 next 为 null 则打印空白(递归终止条件)
- 否则递归到下一个节点
- 然后打印当前节点
在代码中,这变成:
public String printReverse() {
return printReverse(head);
}
private String printReverse(Node n) {
return next == null ? "" : (printReverse(next) + n.value);
}
实际上只有两行代码 - 请参阅 KISS .
关于第二个私有(private)方法,递归实现的公共(public)方法通常只是将 ip 设置为具有适当初始状态的私有(private)递归方法的调用。
关于java - 使用递归反向打印单链表 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16557012/