k个一组翻转链表 发表于 2019-07-26 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。 123456789101112131415161718192021222324252627282930313233343536373839class Solution {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; }};