题目链接:25. K 个一组翻转链表 - 力扣(LeetCode)
递归+迭代,迭代翻转每组的链表节点,递归翻转下一组的链表节点
class Solution {
public:ListNode* reverseKGroup(ListNode* head, int k) {ListNode*nextHead=head; // 下一组的头部for(int i=0;i<k;i++){ // 先计算下一组的头部,不够就直接返回if(!nextHead)return head;nextHead=nextHead->next;}ListNode*curr=head->next;head->next= reverseKGroup(nextHead,k); // 翻转下一组,接到当前组的后面while(--k){ // 第一个节点已经确定尾部ListNode*next=curr->next; // 记录下一个的位置curr->next=head; // 把前一个节点放到当前节点的后面head=curr; // 更新当前节点为前一个节点curr=next; // 更新下一个节点为当前节点}return head; // 返回当前组最后一个节点}
};