给定一个链表root和一个常数k,把链表按照顺序分成k个部分,要求任意两个部分之间相差不能超过一个元素。
思路:设root的长度为l,则l/k可以先求出每部分的长度,若有余数,设余数为i,那么只需在前i个部分再添加一个元素即可。r若k>l,实际上也不需要特别处理,按照上面的过程,自然会把结果置为null。
public ListNode[] splitListToParts(ListNode root, int k) {
ListNode[] heads= new ListNode[k];
ListNode curr = root;
ListNode pre = null;
int len1 = 0;
while(curr != null) {
curr = curr.next;
len1 ++;
}
curr = root;
int len2 = len1 / k;
int n = len1 % k;
curr = root;
for(int i = 0; i < k; i++) {
heads[i] = curr;
for(int j = 0; j < len2; j++) {
pre = curr;
curr = curr.next;
}
if(n > 0) {
pre = curr;
curr = curr.next;
n --;
}
pre.next = null;
}
return heads;
}