【发布时间】:2013-05-15 04:42:18
【问题描述】:
您好,我在尝试使用递归以相反顺序打印单链表时遇到了一点麻烦。我看过一些例子,但我的方法不带任何参数。我想按以下格式打印出来:
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)
我看不出我做错了什么,但我怀疑这可能是我自己调用该方法的方式。谁能建议我可能做错了什么以及如何解决它?
谢谢!
【问题讨论】:
-
当您执行
head = head.next;时,您应该检查以确保head不是列表中的最后一个节点。否则head将是null,因此你得到null pointer exception。 -
if (head.next != null)应该是条件 -
您的评论
// base case具有误导性,因为head != null中的块正好相反(即递归情况)。 -
@SubhrajyotiMajumder 我按照您的建议进行了尝试,但现在我得到 [4, ] 作为输出。我的 printReverse() 调用正确吗?