题解 | #链表中的节点每k个一组翻转#
链表中的节点每k个一组翻转
https://www.nowcoder.com/practice/b49c3dc907814e9bbfa8437c251b028e
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
class Solution {
public:
/**
*
* @param head ListNode类
* @param k int整型
* @return ListNode类
*/
ListNode* reverseKGroup(ListNode* head, int k) {
ListNode* tail=head;
for(int i=0;i<k;i++)//循环k次
{
if(tail==nullptr)return head;//前k个元素存在null,就返回head
tail=tail->next;//指向第k+1个元素
}
ListNode* cur=head;//cur指向head
ListNode* pre=nullptr;
while(cur!=tail)//翻转直到指向第k+1个元素不再翻转
{
ListNode* temp=cur->next;
cur->next=pre;
pre=cur;
cur=temp;
}
head->next=reverseKGroup(tail, k);//从k+1个元素开始切割给下一次递归,下一段返回头节点
return pre;//返回翻转后的头节点,也就是第k个元素
}
};
