要求:分成k份
思路:两种情况,不够分每次一个,够分把余数一个个加上
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
vector<ListNode*> splitListToParts(ListNode* head, int k) {
vector<ListNode*> ans(k);
ListNode *p=head;
int cnt=0;
while(p){
p=p->next;
++cnt;
}
int a=cnt/k,b=cnt%k;
ListNode *cur=head,*tmp;
for(int i=0;i<k;++i){
ans[i]=cur;
int len;
if(a==0)len=0;//不够分直接加一个
else len=i<b?a:a-1;//够分的话把余数一个个加上
while(len-->0&&cur)cur=cur->next;
if(cur){
tmp=cur->next;
cur->next=nullptr;
cur=tmp;
}
}
return ans;
}
};