网站 多语怎么投放广告是最有效的
链接: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;}
};