LeetCode #61 Rotate List - 刷題之旅
1 題目描述
給定一個鍊錶,將鍊錶向右旋轉 k 步,其中 k 是非負數。
2 解法
看到這個題目的時候,有想到如果今天k很大,這個linked list多少步驟會回到原本的樣子?基本上是當 k 是 鍊錶長度的倍數時,鍊錶會回到原本的樣子,因此我們可以先計算出鍊錶的長度,然後取餘數,這樣就可以得到我們要旋轉的步數。
當last.next
是空的時候,表示觸底
1 | # 先計算長度 |
接下來如果k是2,代表最後面的兩個node會被擠到最前面,因此我們主要有兩個步驟:
- 找到last,把last跟head連接起來
- 找到新的head,把新head的前一個node的next設為None
1 | # 找到last,把last跟head連接起來 |
完整程式碼為
1 | class Solution: |
3 總結
這題我想了一個小時,我沒有發現 len - k - 1 的方便邏輯,原始方法是透過兩個指標slow, fast去找倒數第k個。這題的重點是要先計算長度,然後取餘數,最後再重新串起來。這題的時間複雜度是 O(n),空間複雜度是 O(1)。
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Shannon's Blog 🐟 技術 | 生活 | 旅行! 如果你覺得我的文章有幫助,希望你可以到我的 github 給我一個 star ⭐️ Shannon Blog Repo
評論