題目: LeetCode - 25. Reverse Nodes in k-Group
解題思路
利用 Vector 將 Node 暫存,當達到 k
個時將他們 Reverse,需要注意的是每個 Group 也需要連接好。
參考解法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
|
class Solution { public: ListNode* reverseKGroup(ListNode* head, int k) { if (k == 1 || !head || !head->next) return head; vector<ListNode*> v; auto curr = head; auto newHead = head; auto lastNode = head; bool firstGroup = false; while (curr) { v.push_back(curr); curr = curr->next;
if (v.size() == k) { auto tmp = curr; for (int i = v.size() - 1; i > 0; --i) { v[i]->next = v[i - 1]; }
v[0]->next = tmp; if (!firstGroup) newHead = v.back(); else lastNode->next = v.back();
lastNode = v[0]; firstGroup = true; v.clear(); } } return newHead; } };
|