思路:1.因为要分隔链表,所以要先求出链表的长度
2.有k个部分,所以需要考虑k:看它是否是整数,即分隔后的每个小链表是否都是等分的
3.如果不是等分,比如说多了或少了,多的话怎么办,少了又怎么办
4.题目中说了多了的话补在前面
整体来看,像一个哈希表~
外面是一个数组,数组里的每个元素又是一条链,相当于把每个链子的头放到了外层数组中~
代码:
public ListNode[] splitListToParts(ListNode head, int k) {
//求出链表长度
ListNode cur=head;
int count=0;
while(cur!=null){
count++;
cur=cur.next;
}
//此时cur移到最后,再将它挪到前面,方便进行下一次遍历
cur=head;
//求每个小链子的长度
int size=count/k;
//求分不均匀时多出来的节点个数
int mod=count%k;
//创建一个数组
ListNode[]result=new ListNode[k];
//遍历外层大数组 cur!=null代表链表元素不够均分
for(int i=0;i<k&&cur!=null;i++){
//将链表的头放进数组
result[i]=cur;
//每个头后面需要连接的节点数
int curSize=size+(mod-->0?1:0);
for(int j=0;j<curSize-1;j++){
cur=cur.next;
}
//分隔链表操作
ListNode next=cur.next;
cur.next=null;
cur=next;
}
return result;
}