leetcode : Reverse Nodes in k-Group
runtime 8 ms, beats 99.56% of cpp submissions
O(n) solution with explanation
tags: linked list, pointer
🔗 link
📖 description
給定一個 linked list 與數字 k ,將 list 內的元素每 k 個一組進行反轉,要求 in place 的完成,也就是不可以使用額外的儲存空間。
ex. 1 -> 2 -> 3 -> 4 -> 5 (k=2) 2 -> 1 -> 4 -> 3 -> 5 最後的 5 因為沒辦法組成一群所以不用反轉
🧠 solution
如果不要求 in place 的話可以很簡單的用陣列儲存,然後分群做反轉了,這是因為陣列可以 random access 每個元素,但使用 list 就沒辦法往回走。
反轉的部分從每個點的數值變成點間的連結,會比較方便操作,在這裡有一些需要注意的點,比如反轉某個群組之後,要維護新的開頭,以及遇到結尾時不要反轉。
⏳ time complexity
獲得 list 長度需要 O(n) ,反轉 list 需要 O(n)
總時間複雜度 O(n)
📝 code
1 | class Solution { |