0

哦亲爱的; 我似乎误会了这一点。

我想将一个单链表拆分 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;
}
4

2 回答 2

1

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

于 2011-04-30T22:27:54.010 回答
0

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

于 2011-04-30T23:35:35.020 回答