這個函數應該從鏈表中移除元素。然而,目前它完成了這項工作,通過進一步的測試,我發現在使用該功能約2-3次後出現分段錯誤。例如,可以說listA
包含1 2 3 4 4 5
,當我做remove listA 4
然後打印listA
的元素時,輸出應該是1 2 3 5
,它是。但是,當我在列表中多次使用1-2次刪除功能時,它會停止工作,並且不斷收到分段錯誤。我不知道爲什麼..任何幫助將不勝感激!函數不能多次工作?
void mylist::remove(int z)
{
Node *currP, *prevP;
prevP = NULL;
for (currP = head;
currP != NULL;
prevP = currP, currP = currP->next) {
if (currP->key == z) {
if (prevP == NULL) {
head = currP->next;
} else{
prevP->next = currP->next;
}
delete currP;
currP=prevP;
numberofnodes--;
}
}
return;
}
你已經接近精確了,但是:*「當我在列表中多次使用1-2次刪除功能時,它會停止工作」*放下了球。看看[「最小,完整,可驗證示例」](http://stackoverflow.com/help/mcve)。顯示您的確切輸入,以及編譯任何人都可以複製的程序 - 粘貼到編譯器(「完成」)並且可以重複(「可驗證地」)給出錯誤的輸出。測試基本案例,例如從包含1的列表中刪除「1」。您可能在過程中發現自己的問題... – HostileFork 2014-10-28 06:39:24
只需修改for循環中的update語句,僅當它不是NULL時才從currP訪問下一個元素。 – 2014-10-28 07:20:41