25. K 个一组翻转链表

class Solution {
public:
    ListNode* reverseKGroup(ListNode* head, int k) {
        ListNode* dummy=new ListNode(-1,head),*tail=dummy;
        while(tail)
        {
            ListNode* tmp=tail;
            for(int i=0;i<k&&tmp!=nullptr;i++)    tmp=tmp->next;
            if(tmp==nullptr)   break;
            ListNode* a=tail->next,*b=a->next;
            for(int i=0;i<k-1;i++)//只用循环k-1次
            {
                ListNode* t=b->next;
                b->next=a;
                a=b;
                b=t;
            }
            auto c=tail->next;
            tail->next->next=b;//组内第一个点指向最后一个点后面的数
            tail->next=a;//组外第一个节点指向组内最后一个数
            tail=c;//更新组外的第一个节点
        }
        return dummy->next;
    }
};
posted @ 2023-03-19 10:31  穿过雾的阴霾  阅读(18)  评论(0)    收藏  举报