25. Reverse Nodes in k-Group
題目網址:https://leetcode.cn/problems/reverse-nodes-in-k-group/
題意:給一 linked list 的
head
, 每k
個 node 一組進行 reverse, 返回修改後的 linked list。
k
為一正整數, 其中k ≤ linkedList.size()
。如果 node 數不為k
的倍數, 則讓剩餘的 node 保持原先的順序。必須實際進行 swap node, 不能只是單純改變
node.val
。進階:設計 $O(1)$ space 的演算法。
Solution:
想法:分成以下步驟
- 先用
groupPre
指向 group 開頭的前一個 node- 取得該 group 的第
k
個 nodekth
, 也就是 group end- reverse 從 group head ~ group end 的 node
- prev 起始設為
kth->next
, 因為 reverse 後 group end 必須連接到剩下的 node- reverse 完後, 首先記住 reverse 後的 group end(因為等等要將
groupPre
更新成 group end, 只是在那之前要先讓groupPre->next
指向新的 group head)- 將
groupPre->next
指向 reverse 後的 group head- 更新
groupPre
為 reverse 後的 group end- 重複以上步驟
class Solution { |
- time:$O(n)$ ➔ 遍歷 linked list
- space:$O(1)$ ➔ 只需常數空間
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Zako's Blog!
評論