【问题标题】:Linkedlist recursive method链表递归方法
【发布时间】:2014-07-25 00:06:39
【问题描述】:

我正在尝试编写一个反向打印链接列表的递归方法,但我收到了 stackoverflow 错误。该方法应在到达数组的最后一个元素时终止,并将控制权返回给调用它的方法,然后该方法将打印并返回给调用它的方法,依此类推。

public void print(Node node){
    if(node.next != null)
       print(node.next);

    System.out.println(" " + node.value + " ");
}

【问题讨论】:

  • 您的列表看起来要么 (1) 太长,要么 (2) 循环。
  • 你没有描述你的链表的拓扑结构。是不是圆形的?您是否有 tailhead 参考,我们可以(可能)使用它来停止您的迭代?
  • 有头部参考。这是一个单链表
  • 我觉得问题是我的内存太小了。有什么建议吗?
  • 如果是内存问题,需要增加栈空间。查看用于运行程序的任何选项。

标签: java recursion linked-list stack-overflow


【解决方案1】:

将你的代码转换成

public void print(Node node){
   System.out.println(" " + node.value + " "); 
 if(node.next != null)
       print(node.next);   

}
  1. 如果还是出现异常失败,说明你有一个循环链表
  2. 如果没有失败,则表示您正在填满分配给应用程序的默认内存堆。您可以尝试增加堆大小以查看是否可以解决问题

一旦发现问题,您可以恢复原始代码。如果您想了解如何增加堆大小,请查看此链接

Increase heap size in Java

【讨论】:

  • 先打印,而不是最后打印。这个想法是以相反的顺序打印东西;如果您在递归之前打印,您将按插入顺序打印它们。
  • 是的,我明白这一点。我正在尝试调试您是否有循环链表或内存不足
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-23
  • 1970-01-01
  • 2017-04-21
  • 1970-01-01
相关资源
最近更新 更多