我想将单链表单拆分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;
}
答案 0 :(得分:1)
你必须把它写成循环而不是递归调用。跟踪您在原始列表中的位置以及新列表的两端,并将节点交替附加到每个列表。
答案 1 :(得分:0)
确保您的递归在某个时刻停止(尝试一个小数据集)。如果它确实那么你在那里没有问题,接下来要做的就是让你的编译器为你增加堆栈大小。默认值非常小(我认为在vc ++ 10上它是1兆字节)。