2011-04-30 32 views
0

哦,親愛的;我似乎誤解了這一點。分裂鏈表多次放入堆棧溢出C++

我想分割一個單鏈表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; 
} 
+7

堆棧溢出是深層遞歸。迭代地而不是遞歸地進行分裂,你會沒事的。 – 2011-04-30 22:23:53

+0

在這條線周圍的一個while循環? – 2011-04-30 22:31:28

+0

@ Tomalak_Geret'kal對不起忘了標記 – 2011-04-30 22:32:00

回答

1

你必須寫爲一個循環而不是遞歸調用。跟蹤您在原始列表中的位置以及新列表的兩端,並將節點交替添加到每個列表中。

0

確保遞歸在某個點停止(嘗試一個小數據集)。如果確實如此,那麼在那裏你沒有任何問題,接下來要做的就是讓你的編譯器爲你增加堆棧大小。默認值非常小(我認爲它是vC++ 10上的一兆字節)。