解答
思路:首先遍历链表得到有效数字的个数,再求出分成k份的余数和每一份的均长,前面的部分长度加1直到余数为零。这样是为了保证长度尽可能相同的同时排在前面的长度大于后面的,例如将长度为5的链表分成三份,余2,每一份长度为1,将余下的加到前面,即[ [1+1], [1+1], [1] ]。
class Solution {
public ListNode[] splitListToParts(ListNode root, int k) {
int len = 0;
ListNode cur = root;
//遍历得出链表的有效数字
while(cur != null){
cur = cur.next;
len++;
}
//求出余数
int mod = len%k;
//等分的长度
int size =len/k;
ListNode [] res = new ListNode[k];
cur = root;
for(int i = 0; i < k && cur !=null; i++){
res[i] = cur;
int cursize = size + (mod-- > 0? 1:0);
for(int j = 0; j < cursize - 1; j++){
cur = cur.next;
}
ListNode next = cur.next;
cur.next = null;
cur = next;
}
return res;
}
}
把简单题目想复杂了