鍊錶刪除指定位置節點 C語言

2021-10-02 21:02:27 字數 1869 閱讀 1736

這裡有個小技巧,容易錯誤。傳入的是個雙重指標 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...