刪除無頭單鏈表的非尾結點並列印單鏈表

2021-08-03 20:50:34 字數 961 閱讀 9414

問題描述:假設有乙個沒有頭指標的單鏈表。乙個指標指向此單鏈表中間的乙個節點(不是第乙個,也不是最後乙個節點),請將該節點從單鏈表中刪除。

一般鍊錶的刪除需要順著頭結點向下找到當前待刪節點的前驅節點,然後讓前驅節點指向後驅節點就行了。這裡,沒有頭結點,就沒辦法找到前驅結點。但我們可以採用「狸貓換太子」的做法。我們把當前結點「看成」是前驅結點,把後續節點當做待刪結點刪除(刪除之前,記下後續結點的值),只需要讓當前結點指向後驅結點的後驅結點。最後把後續結點值賦給當前結點的值。

//刪除乙個無頭單鏈表的非尾節點  

#include

#include

using namespace std;

typedef int datatype;

typedef struct slistnode

slistnode;

slistnode* createnode(datatype x) //創造結點

void pushback(slistnode*

&pphead, int data)

else

cur->next = createnode(data);

} } //刪除乙個無頭單鏈表的非尾節點

void delnoheadnottail(slistnode*

&pphead , int pos)

prev->next = cur->next;

free(cur);

cur->next =

null;

} } void printsnodelist(slistnode*&pphead)

cout <<

"null";

printf("\n");

} void test()

int main()

刪除單鏈表的非尾結點

思路 由於單鏈的的特性,在不遍歷鍊錶的情況下,很難找到要刪除節點 cur 的前乙個節點 pre 在刪除該節點 cur 後,沒有辦法將該節點之前的節點和之後的節點連線起來,因此我們採用替換刪除的方法,就是將該節點 cur 的下乙個節點 next 得到,然後將下乙個節點 next 的值賦給該節點 cur...

刪除乙個無頭單鏈表的非尾節點 從尾到頭列印單鏈表

刪除乙個單鏈表的非尾結點,並且不能遍歷鍊錶,所以我們可以嘗試刪除其他結點以代替此節點,在這裡,我們用要刪除的結點的下乙個結點來代替此節點,刪除下乙個結點之前,先將這個節點儲存起來,再把此結點的值域和指標域賦值給原本要刪除的結點,這樣一來,只用刪除當前被儲存起來的結點即可。部分 刪除單鏈表的非尾結點 ...

單鏈表的增加 無頭結點

單鏈表的增加 無頭結點 本文展示單鏈表的增加 1.從頭部新增 2.從尾部新增 初始化單鏈表 typedef struct listnode listnode typedef listnode list 頭結點為空的初始化 param head void initlist list head 單鏈表插...