單鏈表的前K個的逆序輸出

2022-05-01 20:00:07 字數 1778 閱讀 9836

單鏈表逆序輸出也是常被面試官問到題演算法題,所以自己就總結了一下,在此貼出演算法,與小夥伴們相互交流。

首先要有三個指標,前兩個分別指向首節點,首節點的下乙個節點,第三個是臨時指標,是為了儲存首節點的下乙個節點的下乙個節點,防止鍊錶斷裂

圖1輸出函式一共兩個引數,第乙個是鍊錶本身,第二是k值

首先讓new等於頭結點的next節點,old為new結點的next節點

為了讓逆序輸出,必須定義乙個計數器count,count初值為1,用於終止迴圈的條件。

每次迴圈,必須先指定temp節點為old的next節點(temp=old->next),再將old的指標指向的節點改為new(old->next=new),再將new節點向右移動為old原來的位置(new=old),再將old節點向右移動為temp的位置(old=temp),並將count++,當count=k時跳出迴圈

圖2跳出迴圈時,先將head的next的next(也就是1節點的next)指向old,再將head指向new,不能調換順序,就完成了逆序

圖3**如下所示

#include #include 

/*鍊錶節點結構

*/typedef

struct

nodenode,*pnode;

/*函式宣告

*/pnode create_list();

void

show_list(pnode p);

void

show_list_list(pnode p);

pnode reversedorder(pnode p ,

intk);

/*主函式

*/int

main()

/*生產鍊錶

*/pnode create_list(

void

) pnode ptail=phead;

ptail->pnext=null;

for(i=0;i)

pnew->data=val;

ptail->pnext=pnew;

pnew->pnext=null;

ptail=pnew;

}return

phead;}/*

顯示鍊錶

*/void

show_list(pnode p)

while

(p1)}/*

顯示鍊錶長度

*/int

show_list_length(pnode p)

while

(p1)

return

count;

}/*

逆序*/

pnode reversedorder(pnode p,

intk)

p->pnext->pnext=old;

p->pnext=onew;

//return onew;

}

測試結果:

圖4這就是我對逆序的理解。

單鏈表逆序或者逆序輸出

分為兩種情況,一種是只逆序輸出,實際上不逆序 另一種是把鍊錶逆序。逆序輸出 include include includeusing namespace std typedef struct nodenode 尾部新增 node add int n,node head else if head ne...

將單鏈表的每K個結點逆序

簡單做法,直接使用棧儲存那k個結點,然後將這k個結點逆序後連線到鍊錶上去,只需要注意頭節點即可。高階解法直接對鍊錶進行處理,每一次記錄當前逆序分組的第乙個結點和最後乙個結點,也需要考慮頭節點 解法 使用棧 直接對鍊錶進行迭代 普通 public static node reverseknode1 n...

如何逆序輸出單鏈表?

怎樣才能逆序輸出單鏈表呢?剛剛有人考了我一道題,逆序輸出單鏈表 我是這樣答的 下面的 為偽 不能通過編譯 void printslist slist plist printf s str.c str 後來他讓我想一想還有沒有更為簡單的方法了,當時允許我上網,我用了幾分鐘到網上找了一下,沒有找到更好的...