問題描述:假設有乙個沒有頭指標的單鏈表。乙個指標指向此單鏈表中間的乙個節點(不是第乙個,也不是最後乙個節點),請將該節點從單鏈表中刪除。
一般鍊錶的刪除需要順著頭結點向下找到當前待刪節點的前驅節點,然後讓前驅節點指向後驅節點就行了。這裡,沒有頭結點,就沒辦法找到前驅結點。但我們可以採用「狸貓換太子」的做法。我們把當前結點「看成」是前驅結點,把後續節點當做待刪結點刪除(刪除之前,記下後續結點的值),只需要讓當前結點指向後驅結點的後驅結點。最後把後續結點值賦給當前結點的值。
//刪除乙個無頭單鏈表的非尾節點
#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 單鏈表插...