gpt4 book ai didi

java - 使用递归反向打印单链表 - Java

转载 作者:行者123 更新时间:2023-12-01 23:48:59 26 4
gpt4 key购买 nike

嗨,我在尝试使用递归以相反的顺序打印单链表时遇到了一些麻烦。我看过一些例子,但我的方法不带任何参数。我想按以下格式打印出来:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com