0
我想創建一個鏈表。每個節點將保存一個結構和一個指向下一個節點的指針。當試圖從列表中間刪除一個節點時,由於分段錯誤,程序停止。我試着用這幾種不同的方法。在迭代到我想要刪除的節點後,這裏是我嘗試使用的algorythms。從鏈表中刪除節點
1.在要刪除的節點之後,設置先前節點的「下一個」指針。
// example
node_t *current = head;
while(current->next != NULL) {
if(current->next->b.y <= 5) {
current->next = current->next->next; // first idea, didn't work
}
current = current->next;
}
這,沒有工作。所以我將它調整爲
1.創建一個指向名爲temp的節點的指針。
2.將要刪除的節點複製到temp。
3.將先前節點的'下一個'指針設置爲臨時'下一個'指針。
4.free臨時
// example
node_t *current = head;
while(current->next != NULL) {
if(current->next->b.y <= 5) {
node_t *temp;
temp = current->next;
current->next = temp->next;
free(temp);
}
current = current->next;
}
它仍然無法正常工作。我真的不知道什麼是錯的,因爲對我來說,它看起來非常合理。我知道我必須弄清楚我是如何初始化指針的,或者如何刪除節點。如果有人能告訴我爲什麼代碼不能正常工作,我可以修復它。
你可以顯示node_t結構嗎? – Coconop
如果入口處有'head == NULL'這兩個片段都有問題。此外,你不處理你需要刪除頭節點的情況(所以'head-> by <= 5'。你是否瀏覽了頁面右邊的相關問題以尋求幫助? –
@JonathanLeffler I因爲某種原因,在學術界受到重創的過度曝光(和imnsho毫無價值)設計,或者它只是一個bug而已= P – WhozCraig