class { public: ListNode* reverse(ListNode* root){ ListNode* pre = NULL; ListNode* node = root; ListNode* next; while (node != NULL) { next = node->next; node->next = pre; pre = node; node = next; } return pre; } ListNode* reverseKGroup(ListNode* head, int k){ if (head == NULL || head->next == NULL || k == 1) return head; ListNode* result = new ListNode(-1); ListNode* r = result; while (head != NULL) { int i; ListNode* start = head; ListNode* next; for (i = 1; i < k && head != NULL; i++) head = head->next; if (i <= k && head == NULL) { r->next = start; break; } else { next = head->next; head->next = NULL; r->next = reverse(start); r = start; head = next; } } return result->next; } };
近期评论