自学内容网 自学内容网

力扣打卡10:K个一组翻转链表

链接:25. K 个一组翻转链表 - 力扣(LeetCode)

这道题需要在链表上,每k个为一组,翻转,链接。

乍一看好像比较容易,其实有很多细节。比如每一组反转后怎么找到上一组的新尾,怎么找到下一组的新头。并且进阶做法需要空间O(1)。只能遍历一个链表。

我将题大致分为几步:

1.用l,r指针作移动窗口,划定当前组(通过固定l,移动r)

2.将本组的头,尾结点记录。

3.翻转当前组

4.将上一个组的尾连接当前组的新头。

再注意一些长度不足,第一组等细节,就可以解题。

我的代码:

class Solution {
public:
    ListNode* reverseKGroup(ListNode* head, int k) {
        if(k==1) return head;
        ListNode *a,*b,*c,*l,*r,*t;
        a=b=c=l=r=t=head;
        ListNode *m=nullptr;
        bool flag=0;
        while(1)
        {
            for(int i=1;i<k;i++)
            {
                if(r==nullptr) break;
                r=r->next;
            }
            if(r==nullptr) break;
            if(flag==0){flag=1; t=r;}
            else m->next=r;
            a=m; b=l; c=l->next; m=l; l=r->next;
            while(c!=r->next)
            {
                b->next=a;
                a=b;
                b=c;
                c=c->next;
            }
            b->next=a; r=l; 
        }
       if(flag==1) m->next=l;
       return t;
    }
};


原文地址:https://blog.csdn.net/Bigkinder/article/details/144333057

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!