題目:
定義乙個函式,輸入乙個鍊錶的頭結點,翻轉該鍊錶並輸出翻轉後鍊錶的頭結點。
分析:這個題剛看的時候可能會和之前遇到的逆序輸出鍊錶差不多,不過在那個題目中並沒有改變鍊錶的指標,而是通過增加空間來進行逆序輸出的,還記得怎麼做嗎?當然就是增加乙個n長度的棧。當然如果題目要求中是可以改變鍊錶的,並且只允許增加常數的空間,那麼就和這個題目是一樣的解決方法了。
那看這個題怎麼解吧!
用這個圖來說明,如果我們把3之前的結點都進行了翻轉,並且3也把指標指向了前面的結點的話,那麼,此時4結點就會找不到了,所以我們需要乙個指標指向儲存4結點,我們還需要乙個指標來指向3前面的乙個結點2,這樣,我們總共需要3個指標就可以完成逆序了。分別指向當前結點和前後兩個結點。
過程:首先乙個指標儲存當前結點的後結點,當然如果後結點為空的話,我們就相當於找到了翻轉之後的頭結點(也就是此時鍊錶的尾結點)。然後將當前結點的next指標指向當前結點的前結點,接下來就要往前移動了,下面包含兩步(1,前結點就要指向當前結點了。2,當前結點指向下乙個結點)。
過程挺簡單,**中也有優化,下面看**:
listnode * reverselist(listnode * headlist)
return preversehead;
}
劍指Offer 16 翻轉鍊錶
題目 定義乙個函式,輸入乙個鍊錶的頭結點,翻轉該鍊錶並輸出翻轉後的鍊錶。思路 1.使用兩個指標a,b分別指向待翻轉的兩個結點,同時為了防止斷鏈,使用乙個指標c儲存b next指標,c b next。2.a,b兩個結點翻轉後,令a b,b c。3.迴圈1,2直至b為null。注意 1.頭結點的next...
劍指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 下乙個節點 ...