题目
思路
首先遍历节点,计算链表长度,建立数组list,记录该节点应该是一个多长的链,然后使用两个指针,一个指向当前节点一个指向上一个节点,用来断开链表,存入结果数组res
时间
代码
class Solution {
public ListNode[] splitListToParts(ListNode root, int k) {
ListNode node=root;
int num=0;
while(node!=null){
num++;
node=node.next;
}
ListNode[] res=new ListNode[k];
int[] list=new int[k];
int temp1=num/k;
int temp2=num%k;
for(int i=0;i<k;i++){
if(i<temp2){
list[i]=temp1+1;
}else{
list[i]=temp1;
}
}
ListNode head=root;
ListNode fast=null;
OUTER:
for(int i=0;i<res.length;i++){
int temp=list[i];
res[i]=head;
for(int j=0;j<temp-1;j++){
if(head==null)break OUTER;
head=head.next;
}
fast=head;
if(head==null)break OUTER;
head=head.next;
fast.next=null;
}
return res;
}
}