所以我在玩弄鏈表,試圖讓我的大腦圍繞在他們身上,並且我決定爲列表中的每個節點添加「序數」值。這樣,我可以通過序號而不是價值來刪除,並且稍後再做一些其他很酷的事情。重置鏈接列表序號
只有當我從列表中刪除一個元素時,所有的序號纔會被擊暈(相當明顯),所以我認爲「好吧,我只是在不同的函數中運行列表,重新設置所有的序號的序號「。從技術上講,我可以在被刪除的元素上啓動這個函數,並將其從該節點的序號中傳遞出來以節省時間,因爲之前的節點應該是未觸及的,但現在我以不那麼優雅的方式來做,因爲我這樣說。
「你的問題是什麼?」。我知道你會問這個! 「繼續吧!」我知道你會這麼說!
測試程序,我可以鏈接到或包含在這裏,只是創建一個5個節點的列表,刪除第三個節點,然後添加一個節點到最後。
預期輸出是:DEBUG: resetting ordinals: 0 1 2 3 4
實際的輸出是:DEBUG: resetting ordinals: 1 2 4 5 5
所以,沒有任何廢話少說,下面是我的問題:爲什麼是我的預期不同的實際輸出?
void ll_fix(node_t* list)
{
node_t* root = list;
int ordinal = 0;
printf("DEBUG: resetting ordinals: ");
while(list->next != NULL)
{
list->ordinal = ordinal;
list = (node_t*)list->next;
printf("%d ",list->ordinal);
ordinal++;
}
printf("%d\n",list->ordinal);
list = root; // rewind the list
}
好點,編輯預期輸出(代碼複製粘貼,所以它是真正的代碼)。 – 2012-03-18 21:52:58