当前位置: 首页 > 知识库问答 >
问题:

用递归-Java实现单链表的反向打印

年业
2023-03-14
input: [1, 2, 3, 4, 5] and output:[5, 4, 3, 2, 1]
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)

共有1个答案

濮阳振海
2023-03-14

你太把事情复杂化了。让我们看看伪代码:

  • 初始节点为head
  • 如果next为空打印空白(递归终止条件)
  • 否则递归到下一个节点
  • 然后打印当前节点

在代码中,这将变为:

public String printReverse() {
    return printReverse(head); 
}

private String printReverse(Node n) {
    return next == null ? "" : (printReverse(next) + n.value);
}
 类似资料:
  • 我试图以相反的顺序打印一个链表,但实际上没有使用递归进行反转,但我的输出结果非常奇怪。看起来我的代码基本上选择了第一个节点,并在打印完链表的其余部分(按原始顺序)后将其打印出来。我所写的代码(据我所知)是正确的,并且与internet上解决此问题的代码相匹配。 这是我的代码: 以下是节点类: 这是我给出的输入,然后是输出: 这里发生的另一个奇怪的事情是,如果我改变递归的条件,假设我这样做: 然后是

  • 本文向大家介绍单链表反转 递归法Java实现相关面试题,主要包含被问及单链表反转 递归法Java实现时的应答技巧和注意事项,需要的朋友参考一下 经历了很多面试,面试官最爱考察的算法无非是斐波那契数列和单链表反转,尽管是这些都是基础知识,然而我对单链表反转有更多的想法。 递归法是我早期最爱在面试中使用的算法,很有逼格,写起来非常优雅,非常好理解。 先定义链表数据结构 如上代码所示 递归法会逐层确定该

  • 还缺少的是将最后一个节点的next赋值为NULL。 在任何世界里,像这样的东西会起作用吗?它给出了一个运行时/分段错误。

  • 我做了一个使用递归方法反转单链表的函数。然而,我在执行下面的代码时遇到了一些困难: 我应该如何在ReverseCursive函数/方法中传递第二个参数,以便执行它? 作为第二个参数,我想简单地传递链表的头节点。但是我不知道如何从类的init方法中获取头节点linked_list 我试了几件事,但都解决不了。也许我不太擅长OOP概念。有人能帮我解决这个问题吗?