题目:

struct ListNode{
    int val;
    ListNode* next;
    ListNode(): val(0), next(nullptr) {}
    ListNode(int _val): val(_val), next(nullptr) {}
    ListNode(int _val, ListNode* _next): val(_val), next(_next) {}
};

class Solution {
public:
    ListNode* reverseKGroup(ListNode* head, int k) {
        //先判断是否小于k个节点,小于的话直接返回head(递归终止条件)
        ListNode* p = head;
        for(int i = 0; i < k; i++) {
            if(!p) return head;
            p = p->next;
        }
        //翻转链表
        ListNode* cur = head;
        ListNode* pre = nullptr;
        while(cur!=p){
            ListNode* tmp = cur->next;
            cur->next = pre;
            pre = cur;
            cur = tmp;
        }
        //head变成最后一个节点,递归指向下一个链表递归翻转后的头结点
        head->next = reverseKGroup(p, k);
        return pre;
    }
};


作者:凉生
链接:https://leetcode.cn/problems/reverse-nodes-in-k-group/solutions/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
posted on 2024-03-12 22:38  孜孜不倦fly  阅读(2)  评论(0编辑  收藏  举报