單鏈表逆序輸出也是常被面試官問到題演算法題,所以自己就總結了一下,在此貼出演算法,與小夥伴們相互交流。
首先要有三個指標,前兩個分別指向首節點,首節點的下乙個節點,第三個是臨時指標,是為了儲存首節點的下乙個節點的下乙個節點,防止鍊錶斷裂
圖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 後來他讓我想一想還有沒有更為簡單的方法了,當時允許我上網,我用了幾分鐘到網上找了一下,沒有找到更好的...