https://leetcode.com/problems/split-linked-list-in-parts/
hint: If there are N nodes in the list, and k parts, then every part has N/k elements, except the first N%k parts have an extra one.
class Solution {
public ListNode[] splitListToParts(ListNode head, int k) {
// 例1: 长度为10的链表, 分成3段, [4 3 3]
// 其中,10%3=1段长度为4, 3-1=2段长度为3
// 例2: 长度为11的链表, 分成3段, [4 4 3]
// 其中,11%3=2段长度为4, 3-1=2段长度为3
// 结论: 长度为L的链表, 分成k段, [a个"L/k向下取整", b个"L/k向上取整"]
// 其中, a=L%k, b=k-b
ListNode[] result = new ListNode[k];
int L = 0;
ListNode node = head;
while (node != null) {
L++;
node = node.next;
}
int floor = L / k;
int ceil = (int) Math.ceil((float) L / k);
int a = L % k;
int b = k - a;
// split
int i = 0;
ListNode pre = null;
ListNode newHead = head;
node = head;
for (int j = 0; j < a; j++) {
for (int l = 0; l < ceil; l++) {
pre = node;
node = node.next;
}
if (pre != null) pre.next = null;
else newHead = null;
result[i++] = newHead;
newHead = node;
}
for (int j = 0; j < b; j++) {
for (int l = 0; l < floor; l++) {
pre = node;
node = node.next;
}
if (pre != null) pre.next = null;
result[i++] = newHead;
newHead = node;
}
return result;
}
}



