為什么我洗掉2 它會把3的位置洗掉, 我輸3 它就沒地方報錯了,我發現它會往下面洗掉一個這是為什么

uj5u.com熱心網友回復:
首先你想洗掉一個節點要保存被刪節點的前一個節點以及后一個節點,你除錯下你的listdelete里的邏輯,你有保存被洗掉節點的前一個節點嗎?建議先畫圖理解一下鏈接的規則!uj5u.com熱心網友回復:
你是不是一共就建立了3個,然后你每一個元素都靠后了一個uj5u.com熱心網友回復:
你是不是一共就建立了3個,然后你每一個元素都靠后了一個
uj5u.com熱心網友回復:
不是太懂這個邏輯,大佬能不能幫我講一下根據這個題
uj5u.com熱心網友回復:
我只知道要參考一個新的指標,保存那個被洗掉的,然后釋放
uj5u.com熱心網友回復:
我也不太懂 你知道嗎
uj5u.com熱心網友回復:
你需要獲得待洗掉節點的前一個節點,而不是待洗掉節點本身,把待洗掉節點的前一個節點的next指向待洗掉節點的后一個節點就洗掉掉了uj5u.com熱心網友回復:
代碼應該怎么實作,我還是不太懂這個邏輯 好復雜??
uj5u.com熱心網友回復:

Linklist *q = L, *k = q->next;
//L有頭結點,即現在q指向頭結點,無資料,k指向第一個節點
//位置從0開始計數,即n為0洗掉第一個節點
for (int i = 0; k && (i < n); ++i)//這里把k作為判斷條件,防止超限
{
//始終保持q是k的前一個節點
q = k;
k = k->next;
}
//回圈結束k指向的節點是要洗掉的,q是他的前一個節點
q->next = k->next;
free(k);
uj5u.com熱心網友回復:
你把代碼貼上來,我給你修改加注吧轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/105771.html
標籤:C語言
