這裡有個小技巧,容易錯誤。傳入的是個雙重指標 st_datanode** phead,因為刪除在首節點的位置時候,煉表頭的位置會發生改變,指向新的節點,所以需要傳入雙重指標,以便接收修改的新的煉表頭的位置
**實現
st_datanode * removelistnode(st_datanode** phead, int pos)
st_datanode * head = *phead;
st_datanode * p = null;
st_datanode * q = null;
st_datanode * nw = null;
if(0 == pos) else
return nw;
}void testremovenode(void)
除錯編譯
gcc listmain.c list.c -o a.exe -ddebug
除錯輸出
*****==== dump list 0x193b010 **********=
22 32 19 53 0 47 29 116 4 6
***********************************
list length = 10
node: 0x193b130, data = 6
can not found num 119
can not found pos -1 node
find pos 0 node: 0x193b010, data = 22
find pos 5 node: 0x193b0b0, data = 47
超過鍊錶長度了!
can not found pos 12 node
*****==== dump list 0x193b150 **********=
70 22 32 19 53 0 47 29 116 4 6
***********************************
*****==== dump list 0x193b150 **********=
70 22 32 19 53 31 0 47 29 116 4 6
***********************************
*****==== dump list 0x193b150 **********=
70 22 32 19 53 31 0 47 29 116 4 6 66
***********************************
removed node 0x193b190: data 66
*****==== dump list 0x193b150 **********=
70 22 32 19 53 31 0 47 29 116 4 6
***********************************
removed node 0x193b170: data 31
*****==== dump list 0x193b150 **********=
70 22 32 19 53 0 47 29 116 4 6
***********************************
removed node 0x193b150: data 70
*****==== dump list 0x193b010 **********=
22 32 19 53 0 47 29 116 4 6
***********************************
單向鍊錶 二 刪除指定位置的節點
1 刪除單向鍊錶中的某個節點,比如刪除第3個節點,如下圖所示 2 為了便於說明,將節點的位置 作為 節點的資料值。由圖可知,要刪除第3個節點,只要先使第2個節點指向第4個節點,構成乙個新的鍊錶1 2 4 接著釋放第3個節點就可以了。3 具體實現函式 tagnode deletenode tagnod...
反轉鍊錶指定位置
反轉從位置 m 到 n 的鍊錶。請使用一趟掃瞄完成反轉。首先找到要反轉的位置,從n位置開始。要反轉乙個結點cur 反轉2 4位置結點 到這裡還沒有結束 還需要將1的next改為4結點 2的next改為5結點 所以最開始之前,必須借用front引用儲存m位置的前驅prev。找到m位置後,使用引用rea...
鍊錶之指定位置插入
指定位置插入 做這種查詢類的插入,先不要著急建立節點,要考慮沒找到的情況,沒找到就不需要建立節點 include struct node 建立頭節點 struct node createhead headnode next null return headnode 建立節點,方便使用者插入資料 st...