【C++】22行递归代码

链表中的节点每k个一组翻转

http://www.nowcoder.com/questionTerminal/b49c3dc907814e9bbfa8437c251b028e

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复原成头
        for(int i = 0; i < k; i++) {
            next = cur->next; //记录后一个ListNode
            cur->next = pre; //cur指向前一个ListNode
            pre = cur; //pre右移
            cur = next; //cur右移
        }
        head->next = reverseKGroup(next, k); //此时k个ListNode翻转完毕,尾(原来的头)指向递归后返回的头
        return pre; //返回新的头
    }
};
全部评论
看了一遍把我整晕了,我脑子还是不好使
2 回复 分享
发布于 2021-03-21 23:07
棒棒棒
点赞 回复 分享
发布于 2021-03-20 11:41
妙啊
点赞 回复 分享
发布于 2021-03-15 13:02

相关推荐

08-29 17:17
已编辑
门头沟学院
嗨害嗨我来了:张总:你们这些年轻人,这不是把我的爱好暴露了吗?
工作时那些社死瞬间
点赞 评论 收藏
分享
评论
42
9
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务