https://leetcode.com/problems/reverse-nodes-in-k-group/description/
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* reverseKGroup(ListNode* head, int k) { ListNode h(0); ListNode *pre = &h; while (true) { ListNode* tail = head; int i = 1; for (; i < k && tail; i++) tail = tail->next; if (tail) { ListNode* tailNext = tail->next; reverseList(head, tailNext); pre->next = tail; head->next = tailNext; pre = head; head = tailNext; } else { pre->next = head; break; } } return h.next; } void reverseList(ListNode* head, ListNode* tail) { ListNode* pre = NULL; while (head != tail) { ListNode* p = head->next; head->next = pre; pre = head; head = p; } } };