劍指Offer 16 翻轉鍊錶

2021-07-07 04:44:42 字數 1093 閱讀 5313

題目:

定義乙個函式,輸入乙個鍊錶的頭結點,翻轉該鍊錶並輸出翻轉後的鍊錶。

思路:

1.使用兩個指標a,b分別指向待翻轉的兩個結點,同時為了防止斷鏈,使用乙個指標c儲存b->next指標,c=b->next。

2.a,b兩個結點翻轉後,令a=b,b=c。

3.迴圈1,2直至b為null。

注意:

1.頭結點的next指標賦null

2.鍊錶為空的情況

3.鍊錶只有乙個結點的情況

#include using namespace std;

struct listnode ;

listnode* reverselist(listnode *phead)

//鍊錶只包含乙個結點

if(phead->pnext == null)

//鍊錶包含多個結點

//pleft與pright兩個結點翻轉

listnode *pleft = phead;

listnode *pright = phead->pnext;

//pnode的作用為防止斷鏈,記錄pright的next指標

listnode *pnode = null;

//第乙個結點的next指標賦null

phead->pnext = null;

//翻轉鍊錶

while(pright)

return pleft;

}/**

* 向鍊錶中插入結點

*/void insertlist(listnode **phead,listnode *value)

else

head->pnext = value;

}}/**

* 向鍊錶中插入結點

*/void insertlist(listnode **phead,int value)

/** * 列印鍊錶

*/void print(listnode *p)

cout

劍指Offer16翻轉鍊錶

題目 定義乙個函式,輸入乙個鍊錶的頭結點,翻轉該鍊錶並輸出翻轉後鍊錶的頭結點。分析 這個題剛看的時候可能會和之前遇到的逆序輸出鍊錶差不多,不過在那個題目中並沒有改變鍊錶的指標,而是通過增加空間來進行逆序輸出的,還記得怎麼做嗎?當然就是增加乙個n長度的棧。當然如果題目要求中是可以改變鍊錶的,並且只允許...

劍指offer 16 反轉鍊錶

class listnode 題目 鍊錶翻轉 解法 設立三個標誌直接進行翻轉 public class main public static listnode reverselist listnode node listnode pre null 前序結點先設定為空 listnode point n...

劍指Offer 翻轉鍊錶

題目 寫出乙個函式,給定乙個鍊錶的頭節點,反轉該鍊錶並輸出其頭節點 struct node linklist 對於煉表頭和鍊錶尾,也有多種定義方式。比如 linklist list int value list value 第乙個元素 node secondnode list next 下乙個節點 ...