【问题标题】:Splitting linked list so many times puts into stack overflow c++多次拆分链表会导致堆栈溢出c ++
【发布时间】:2011-04-30 22:18:48
【问题描述】:

哦,亲爱的;我好像误会了。

我想将一个单链表拆分 10,000 次,但显然(在你们帮助我之前我不知道这一点)它会导致堆栈溢出。

我对此真的很陌生,所以有什么办法我仍然可以做到这一点并且不会导致堆栈溢出?使用参考还是什么?

方法如下:

Node* Node::Split()
{
    if(next == NULL)
    {
        return this;
    }
    Node *newNode = this->next;
    if(this->next != NULL)
    {

        this->next = newNode->next;
    }
    if(newNode->next != NULL)
    {
        newNode->next = newNode->next->Split();
    }
    return newNode;
}

【问题讨论】:

  • 栈溢出就是深度递归。迭代地而不是递归地进行拆分,你会没事的。
  • 就像在该行周围循环一样?
  • @Tomalak_Geret'kal 抱歉忘记加标签
  • @Tazzy:你需要做更多的改变,但是,是的,你的解决方案将涉及一个循环。

标签: c++ split mergesort singly-linked-list


【解决方案1】:

您必须将其编写为循环而不是递归调用。跟踪您在原始列表中的位置以及新列表的两端,并将节点交替附加到每个列表中。

【讨论】:

    【解决方案2】:

    确保您的递归确实在某个时间点停止(尝试一个小数据集)。如果是这样,那么您就没有问题,接下来要做的就是要求您的编译器为您增加堆栈大小。默认值很小(我认为在 vc++ 10 上是 1 兆字节)。

    【讨论】:

      猜你喜欢
      • 2016-02-09
      • 1970-01-01
      • 1970-01-01
      • 2016-05-26
      • 1970-01-01
      • 1970-01-01
      • 2014-12-20
      • 2012-02-13
      • 2015-05-21
      相关资源
      最近更新 更多