2
pair<ListNode *, ListNode *> get_rev_list(ListNode *root) {4
ListNode *curr = root, *temp, *prev = NULL;14
return make_pair(prev, tail);18
ListNode *reverseKGroup(ListNode *head, int k) {19
if (k == 1) return head;21
vector<pair<ListNode *, ListNode *>> store;23
ListNode *temp = head, *temp_head = head;26
while (temp != NULL) {30
ListNode *next_head = temp->next;33
store.push_back(get_rev_list(temp_head));36
temp_head = next_head;41
if (len == k) store.push_back(get_rev_list(temp_head));43
for (int i = 1; i < store.size(); i++) store[i - 1].second->next = store[i].first;45
if (len != k) store[store.size() - 1].second->next = temp_head;47
return store[0].first;