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

递归如何以相反的顺序打印链表元素?

陈开宇
2023-03-14
void Factorial(int n)
{
  if(n==0) return 0;
  else if(n==1) return 1;
  else
  {
    return n*Factorial(n-1);
  }
}
void ReversePrint(Node head) {    
if(head==null)
    {
    return;
    }
else
    {
    ReversePrint(head.next);
    System.out.println(head.data);
    }
}

共有1个答案

郭琦
2023-03-14

添加一些额外的注释应该会有所帮助:

void ReversePrint(Node node) {
    if (node == null) {
        // An empty list has nothing to print.
        return;
    } else {
        // First print the rest of the list.
        ReversePrint(node.next);
        // Then print this node.
        System.out.println(node.data);
    }
}

所以-本质上-

  • 空列表不打印任何内容。
  • 非空列表应先打印列表的其余部分,然后打印根节点。
 类似资料:
  • 我将感谢任何帮助,我是一个初学者,因为你可能会告诉。提前谢谢大家! 我可以用递归来做这个,但我想学习弄清楚这个方法。

  • 我在Hackerrank上解决反向挑战的指纹 方法接受一个参数-链表的头部。您不应该从stdin/console中读取任何输入。头部可能是空的,所以不应该打印任何东西。按照与stdout/console相反的顺序打印链表的元素(使用printf或cout),每行一个。 NB:节点的结构为struct Node{int data;struct Node*next;}

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

  • 我需要实现一个递归方法printDigits,它将一个整数num作为参数,并以相反的顺序打印它的数字,每行一个数字。 这是我到目前为止所拥有的: 我觉得我只缺少一行代码,但不确定我需要做什么来修复它。

  • 我试图使用递归打印链表中每个节点中的数据,但是我得到了越界错误,所以我认为递归函数有问题。 这是头文件: 基本上,我从公共函数调用私有助手函数。下面是两个函数的代码: 我认为问题出在if块中,因为如果没有下一个节点,我需要停止,但在返回之前还需要打印当前节点中的数据,但因为我已经调用了