# K 个一组翻转链表

给你一个链表,每 个节点一组进行翻转,请你返回翻转后的链表。

是一个正整数,它的值小于或等于链表的长度。

如果节点总数不是 的整数倍,那么请将最后剩余的节点保持原有顺序。

进阶:

 

示例 1:

输入:head = [1,2,3,4,5], k = 2
输出:
[2,1,4,3,5]

示例 2:

输入:head = [1,2,3,4,5], k = 3
输出:
[3,2,1,4,5]

示例 3:

输入:head = [1,2,3,4,5], k = 1
输出:
[1,2,3,4,5]

示例 4:

输入:head = [1], k = 1
输出:
[1]

提示:

以下程序实现了这一功能,请你填补空白处的内容: ```cpp #include using namespace std; struct ListNode { int val; ListNode *next; ListNode() : val(0), next(nullptr) {} ListNode(int x) : val(x), next(nullptr) {} ListNode(int x, ListNode *next) : val(x), next(next) {} }; class Solution { public: ListNode *reverseGroup(ListNode *head, int k) { int len = 0; struct ListNode dummy, *prev = &dummy; dummy.next = head; for (; head != nullptr; head = head->next) { ____________________; } return dummy.next; } }; ``` ## template ```cpp #include using namespace std; struct ListNode { int val; ListNode *next; ListNode() : val(0), next(nullptr) {} ListNode(int x) : val(x), next(nullptr) {} ListNode(int x, ListNode *next) : val(x), next(next) {} }; class Solution { public: ListNode *reverseGroup(ListNode *head, int k) { int len = 0; struct ListNode dummy, *prev = &dummy; dummy.next = head; for (; head != nullptr; head = head->next) { if (++len % k == 0) { struct ListNode *p = prev->next; while (prev->next != head) { struct ListNode *q = p->next; p->next = q->next; q->next = prev->next; prev->next = q; } prev = p; head = p; } } return dummy.next; } }; ``` ## 答案 ```cpp if (++len % k == 0) { struct ListNode *p = prev->next; while (prev->next != head) { struct ListNode *q = p->next; p->next = q->next; q->next = prev->next; prev->next = q; } prev = p; head = p; } ``` ## 选项 ### A ```cpp if (len % k == 0) { struct ListNode *p = prev->next; while (prev->next != head) { struct ListNode *q = p->next; p->next = q->next; q->next = prev->next; prev->next = q; } prev = p; head = p; } ``` ### B ```cpp if (++len % k == 0) { struct ListNode *p = prev->next; while (prev->next != head) { struct ListNode *q = p->next; prev->next = q; q->next = prev->next; p->next = q->next; } prev = p; head = p; } ``` ### C ```cpp if (++len % k == 0) { struct ListNode *p = prev->next; while (prev->next != head) { struct ListNode *q = p->next; prev->next = q; p->next = q->next; q->next = prev->next; } prev = p; head = p; } ```