思路:模拟法。
关键点:
每组平均长度len = 链表长度 / k组
可以有多少组的长度是多一个的 = 链表长度 % k组
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode[] splitListToParts(ListNode head, int k) {
int n = 0;
ListNode node = head;
while (node != null) {
n++;
node = node.next;
}
int number = n / k;
int groupPlusOne = n % k;
ListNode[] res = new ListNode[k];
ListNode curr = head;
for (int i = 0; i < k && curr != null; i++) {
res[i] = curr;
int partialLen = number + (i < groupPlusOne ? 1 : 0);
for (int j = 1; j < partialLen; j++) {
curr = curr.next;
}
ListNode next = curr.next;
curr.next = null;
curr = next;
}
return res;
}
}