分隔链表
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/89507f4f5b9211914536376564a1cd79.png)
package CLinkedList;
import com.sun.org.apache.bcel.internal.generic.NEW;
public class Problem725 {
public ListNode[] splitListToParts(ListNode root, int k) {
if(root==null) return null;
ListNode temp = root;
int size = 0;
while(temp!=null){
size++;
temp=temp.next;
}
int perSegment = size/k;
int sub = size%k;
ListNode[] rs = new ListNode[k];
temp = root;
int index =0;
int indexInArray =0;
for(int i=0;i<sub;i++){
ListNode newHead = null;
ListNode newHeadTemp=null;
if(perSegment+1>=1){
newHead= temp;
newHeadTemp= newHead;
index++;
}
if(index<perSegment+1){
newHeadTemp.next=temp.next;
temp=temp.next;
newHeadTemp = newHeadTemp.next;
index++;
}else{
newHeadTemp.next=null;
rs[indexInArray++]=newHead;
index=0;
}
}
for(int i=sub;i<k;i++){
ListNode newHead = null;
ListNode newHeadTemp=null;
if(perSegment>=1){
newHead= temp;
newHeadTemp= newHead;
index++;
}
if(index<perSegment){
newHeadTemp.next=temp.next;
temp=temp.next;
newHeadTemp = newHeadTemp.next;
index++;
}else{
newHeadTemp.next=null;
rs[indexInArray++]=newHead;
index=0;
}
}
return rs;
}
public ListNode[] splitListToParts1(ListNode root, int k) {
ListNode cur = root;
int N = 0;
while (cur != null) {
cur = cur.next;
N++;
}
int width = N / k, rem = N % k;
ListNode[] ans = new ListNode[k];
cur = root;
for (int i = 0; i < k; ++i) {
ListNode head = cur;
for (int j = 0; j < width + (i < rem ? 1 : 0) - 1; ++j) {
if (cur != null) cur = cur.next;
}
if (cur != null) {
ListNode prev = cur;
cur = cur.next;
prev.next = null;
}
ans[i] = head;
}
return ans;
}
public static void main(String[] args) {
ListNode head = new ListNode(1);
ListNode b = new ListNode(2);
ListNode c = new ListNode(3);
ListNode d = new ListNode(4);
head.next=b;
b.next=c;
c.next=d;
Problem725 problem725 = new Problem725();
problem725.splitListToParts(head,5);
}
}