class Solution {
public:
ListNode* reverseKGroup(ListNode* head, int k) {
if(!head || k <= 1) return head; //空指针及不需要翻转的情况直接返回head
ListNode* pre = nullptr; //记录前一个ListNode
ListNode* cur = head; //记录当前ListNode
ListNode* next = nullptr; //记录后一个ListNode
for(int i = 0; i < k; i++) { //检测ListNode数量是否大于k
if(!cur) return head; //若不大于直接返回头
cur = cur->next; //指向下一个ListNode
}
cur = head; //检测完毕后cur复原成头
//如1,2;3,4;5 反转后为2,1;4,3;5
for(int i = 0; i < k; i++) //反转一组结点
{
next = cur->next; //记录后一个ListNode
cur->next = pre; //cur指向前一个ListNode
pre = cur; //pre右移
cur = next; //cur右移
}
//第一组反转后为2,1
head->next = reverseKGroup(next, k); //此时k个ListNode翻转完毕,尾(原来的头)指向递归后返回的头
//1的后面应该为下一组反转后的4
return pre; //返回新的头
}
};
链表中的节点每K个一组反转
最新推荐文章于 2023-09-06 15:39:28 发布
该博客介绍了如何实现一个C++函数,通过递归方式将链表中的K个节点进行分组反转。代码逻辑清晰,首先检查链表长度和K的值,然后通过循环和指针操作完成一组节点的反转,接着递归处理剩余部分。这种方法展示了链表操作和递归思维的结合应用。
摘要由CSDN通过智能技术生成