题目描述
给你一个链表,给你一个K,让你把链表均分为K份,如果不能均分,则前面的链表应该长于后面的链表
思路
这个很像分苹果,我们现在把所有节点比喻成苹果。
假设现在有7个苹果,k=3,即篮子为3个。
那么我们分的方案是
3 2 2
这个方案是这样来的
苹果数 / 篮子数 是每一个篮子的苹果的基数,然后如果苹果数%篮子数>0,代表还有一部分苹果是余出来的,则前面的篮子每一个篮子分一个余出来的苹果即可。
代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
typedef ListNode Node;
vector<ListNode*> splitListToParts(ListNode * root ,int k)
{
vector<ListNode*> ret;
if(k==1)
{
ret.push_back(root);
return ret;
}
if(root==NULL)
{
for(int i=0;i<k;++i)
ret.push_back(NULL);
return ret;
}
int size = 0;
Node * pCur = root;
while(pCur)
{
++size;
pCur = pCur->next;
}
int addition = 0;
if(size>k)
addition = size%k;
else
addition = 0;
Node * start = root;
Node * end =start;
int len = 0;
len = (size/k)?size/k:1;
int j = 0;
for(int i=0;i<k;++i)
{
j=len-1;
if(addition)
{
++j;
--addition;
}
end = start;
while(j--)
{
if(end)
end = end->next;
else
break;
}
ret.push_back(start);
if(end)
{
start = end->next;
end->next = NULL;
}
else
{
start = NULL;
}
}
return ret;
}
};