單鏈表的增刪查 逆置 倒數第k個節點等問題

2021-07-12 02:04:22 字數 2304 閱讀 3774

對於單鏈表而言,它沒有雙鏈表那麼複雜,它只有頭節點,尾節點,節點資料,後繼指標。在下面本人實現了 單鏈表的 增   刪   插  查  改。

#include#include#include#includetypedef int datatype;

typedef struct slistnode

slistnode;

void pushback(slistnode*&phead, datatype x);

void popback(slistnode *&phead);

void printslist(slistnode *&phead);

void pushfrot(slistnode*&phead,datatype x);

void popfront(slistnode*&phead);

slistnode *find(slistnode*phead, datatype x);

//void insert(slistnode*phead, datatype pos, datatype x);

void insert(slistnode*phead,  datatype x);

void erase(slistnode*&phead,slistnode *pos );

void insertnonode(slistnode *pos, datatype x);

slistnode* _buynode(datatype x)

void pushback(slistnode*&phead, datatype x)

else

tail->next = _buynode(x); }}

void popback(slistnode *&phead)

else if (phead->next == null)

else

free(tail);

tem->next = null;  }}

void printslist(slistnode *&phead)  //列印鍊錶

printf("null\n");

}void pushfrot(slistnode*&phead, datatype x)   //頭插

else }

void popfront(slistnode*&phead)    //單鏈表頭刪

else if(phead->next == null)

else

}slistnode *find(slistnode*phead, datatype x)    //查詢節點

else

else

} printf("沒有查到該資料!\n"); }}

void insert(slistnode*pos, datatype x)  在指定節點  插入資料

void erase(slistnode *&phead,slistnode *pos) //刪除指定位置的節點

slistnode *prv = phead;

while (prv)

prv = prv->next; }

}//刪除乙個無頭單鏈表

void delnonode(slistnode *pos)

//在無頭單鏈表的乙個非頭節點前插入乙個節點

void insertnonode(slistnode *pos, datatype x)

//查詢中間節點

slistnode *findmidnode(slistnode *phead)

return slow;

}    //找倒數第k個節點

slistnode *findknode(slistnode *phead, int k)

while (fast->next)

*/ while (fast&&k--)

while (fast)

return slow;

}//從尾到頭列印鍊錶

void printtailtohead(slistnode*phead)}//

slistnode *reverse(slistnode *phead)//單鏈表的逆置

return newhead;

}void test1()

void test2()

void test3()

void test4()

void test5()

void test6()

int main()

以上如果發現有錯的地方或者還有其他建議,希望提出寶貴意見。謝謝!!!

本文出自 「土豆_」 部落格,請務必保留此出處

逆置單鏈表 求倒數第k個結點

定義並建立鍊錶 include using namespace std include typedef struct listnode listnode void push listnode list,int x else cur next tmp 逆置單鏈表 listnode listrevers...

單鏈表的倒數第K個節點

思路 建立兩個迭代器,乙個迭代器quick,乙個迭代器slow,quick沿鍊錶,先行k步,然後和slow一起行進,直至quick到達鍊錶尾端,此時slow對應的資料,就是倒數第k個節點。include include includeusing namespace std listchange ve...

刪除單鏈表倒數第K個節點

有p1,p2兩個指標,p1從頭開始跑,先跑k個節點,然後p2開始跑,當p1跑到頭時,p2指向的就是倒數第k個節點了。這道題的思路比較簡單,要想做得更好,可以加入一些魯棒性的考慮,比如說空鍊錶情況,鍊錶長度小於k等。下面是 include struct node class solution if k...