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 に答える