class Solution {
public:
pair<ListNode*, ListNode*> reverseList(ListNode* start, ListNode* end){
ListNode* pre = end->next;
ListNode* cur = start;
while(pre != end){
ListNode* tmp = cur->next;
cur->next = pre;
pre = cur;
cur = tmp;
}
return make_pair(end, start);
}
ListNode* reverseKGroup(ListNode* head, int k) {
ListNode* dummyhead = new ListNode(0);
dummyhead->next = head;
ListNode* slow = dummyhead;
ListNode* fast = slow;
while(fast){
fast = slow;
for(int i = 0; i < k; i++){
if(fast->next){
fast = fast->next;
}else {
return dummyhead->next;
}
}
ListNode* next = fast->next;
tie(slow->next, fast) = reverseList(slow->next, fast);
fast->next = next;
slow = fast;
}
return dummyhead->next;
}
};