链表中的节点每K个一组反转

该博客介绍了如何实现一个C++函数,通过递归方式将链表中的K个节点进行分组反转。代码逻辑清晰,首先检查链表长度和K的值,然后通过循环和指针操作完成一组节点的反转,接着递归处理剩余部分。这种方法展示了链表操作和递归思维的结合应用。
摘要由CSDN通过智能技术生成

在这里插入图片描述

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; //返回新的头
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值