递归反向SingleLinkedList并打印为字符串

问题描述 投票:1回答:1

我的任务是添加一个最好使用递归反向到SingleLinkedList的方法。

   public String reversed() {
     StringBuilder b = new StringBuilder();
     reversed(first, b);
     return b.toString();
}
    private void reversed(Node<E> n, StringBuilder b) {
       if (n != null) {
         reversed(n.next, b);
         b.append(n.element);
         b.append(’\n’);
      }
}

当我在日食中测试时,似乎工作得很好。

但是,我不确定我是否100%理解为什么。

这就是我的想法。让我们想象一下,我们有5个节点的SingleLinkedList,并在private方法中放入了第一个Node来对其进行反转。

  1. 由于n不为null,因此它是第一个节点。它将输入if语句。
  2. 它会自行调用,但是现在第二个节点,它不为null,因为它将重复...。
  3. 现在它到达节点5,它会自我调用,但是由于节点6的状态存在并且为空,因此它将调用反向(six,b),它将不起作用。因此,它将移至“ b.append(n.element);”行。然而。现在,它会记住它从哪里开始,并附加“ first.element”;之后,它将追加一个新行。
  4. 什么能说明其后将追加第二个元素的逻辑?有人可以解释一下我应该如何理解,现在它将添加第二个元素吗?

谢谢,想想我真的需要对Java中的递归完全理解这一点

我的任务是最好使用递归添加一个反向到SingleLinkedList的方法。 public String reversed(){StringBuilder b = new StringBuilder();反转(first,b); ...

java recursion singly-linked-list
1个回答
0
投票

每个方法调用保持其自己的状态。到达节点6后,堆栈上将有5个调用等待reversed(n.next, b)完成。每个方法只能在其上方的堆栈上的reversed调用完成后才能继续。

© www.soinside.com 2019 - 2024. All rights reserved.