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; } };