拆分链表这么多次都会进入堆栈溢出c ++

时间:2011-04-30 22:18:48

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

亲爱的,亲爱的我似乎对此有所怀疑。

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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