给定一个头结点为 root 的链表, 编写一个函数以将链表分隔为 k 个连续的部分。
每部分的长度应该尽可能的相等: 任意两部分的长度差距不能超过 1,也就是说可能有些部分为 null。
这k个部分应该按照在链表中出现的顺序进行输出,并且排在前面的部分的长度应该大于或等于后面的长度。
返回一个符合上述规则的链表的列表。
举例: 1->2->3->4, k = 5 // 5 结果 [ [1], [2], [3], [4], null ],隔离部分无联系
1 public class SplitLinkedListinParts { 2 static class ListNode { 3 int val; 4 ListNode next; 5 ListNode(int x) { 6 val = x; 7 } 8 } 9 public ListNode[] splitListToParts(ListNode root, int k) { 10 ListNode cur = root; 11 ListNode[] result = new ListNode[k]; 12 int len = 0; 13 while(cur != null) { 14 len++; //获取长度 15 cur = cur.next; 16 } 17 int size = len / k; 18 int mod = len % k; 19 cur = root; 20 for(int i = 0; i < k && cur != null; i++) { 21 int cursize = size + (mod-- > 0 ? 1 : 0); //保证前面长的部分只多一个 22 result[i] = cur; 23 for(int j = 1; j < cursize; j++) { //分割 24 cur = cur.next; 25 } 26 ListNode next = cur.next; //隔离部分最后一个结点和下一部分的第一个结点断绝联系 27 cur.next = null; 28 cur = next; 29 } 30 return result; 31 } 32 }