class Solution {
public:
/**
*
* @param head ListNode类
* @param k int整型
* @return ListNode类
*/
ListNode* reverseKGroup(ListNode* head, int k) {
// corner case
if (!head || !head->next || k <= 1)
return head;
stack<ListNode*> stk;
ListNode dummy(0), *p = &dummy, *curr = head;
for (int cnt = length(head) / k; cnt--; ) {
for (int i = 0; i < k; i = -~i) {
stk.emplace(curr);
curr = (*curr).next;
}
while (not stk.empty()) {
p = p->next = stk.top();
stk.pop();
}
}
p->next = curr;
return dummy.next;
}
private:
size_t length(ListNode* head) {
return head ? 1 + length(head->next) : 0;
}
};