题目链接: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; // 返回当前组最后一个节点
}
};