Leetcode打卡 | No.25 k 個一組翻轉鏈表

  • 2019 年 11 月 12 日
  • 筆記

寫在前邊:

歡迎和小詹一起定期刷leetcode,每周一和周五更新一題,每一題都吃透,歡迎一題多解,尋找最優解!這個記錄帖哪怕只有一個讀者,小詹也會堅持刷下去的!

PS:從第10開始,代碼以圖片形式給出,方便手機用戶閱讀,避免左右滑不便閱讀,完整代碼會上傳GitHub上了:https://github.com/Jan1995/LeetCode


No.25 k 個一組翻轉鏈表

給出一個鏈表,每 k 個節點一組進行翻轉,並返回翻轉後的鏈表。

k 是一個正整數,它的值小於或等於鏈表的長度。如果節點總數不是 k 的整數倍,那麼將最後剩餘節點保持原有順序。

示例 :

給定這個鏈表:1->2->3->4->5

k = 2 時,應當返回: 2->1->4->3->5

k = 3 時,應當返回: 3->2->1->4->5

說明 :

  • 你的算法只能使用常數的額外空間。
  • 你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。

特意留白一行 ,因為小詹做了兩個多小時 ,還是沒做出來 。。。。。。然後也就不想掙扎了 ,看了別人的代碼 ,刷題這個東西 ,不能停啊 !不進則退 。

簡單分析下思路 :

  1. 鏈表長度應該是大於給定值 k 的 ,可以分兩種情況進行處理 。
  2. 一種是連續 k 個節點做翻轉 ,之後將多個鏈表片段進行整合 。
  3. 另一種是鏈表結尾多出的幾個節點 ,不夠 k 個節點的那部分保留不做翻轉 。

以下是討論區的代碼 ,驗證可行 。說實話 ,小詹自己是沒想到 ,小詹自己想到的是相鄰兩個翻轉 ,依次往後 ,但是沒能實現 。。下邊代碼建議自己假設一個案例復現 ,順着思路走能看懂 ,但是自己寫就是另一回事了 ……手生了哎