题解 | #链表中的节点每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个元素 } };