題目: 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
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
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;
}
};