class Solution {
public ListNode[] splitListToParts(ListNode root, int k) {
// 创建结果链表数组
ListNode[] result = new ListNode[k];
// 如果输入的链表是个空链表
if (root == null) {
for (int i = 0; i < k ; i++) {
result[i] = null;
}
return result;
}
// 输入链表不为空,分隔的时候考虑,k大于链表长度时和k小于链表长度时
// 先获得链表的总长度
int len = 0;
ListNode cur = root;
while (cur != null) {
len++;
cur = cur.next;
}
int averageLengthOfSub = len / k;
int residue = len % k;
int subLength = 0;
ListNode subHead = null;
cur = root;
ListNode subTail = null;
//循环k遍,这样获得k段子串
for (int i = 0; i < k; i++) {
if (residue > 0){
subLength = averageLengthOfSub + 1;
}else {
subLength = averageLengthOfSub;
}
residue--;
if (subLength > 0) {
subHead = cur;
for (int j = 0; j < subLength; j++) {
subTail = cur;
cur = cur.next;
}
if (subTail != null) {
subTail.next = null;
}
result[i] = subHead;
}else {
result[i] = null;
}
}
return result;
}
}
力扣(LeetCode)725 分隔链表(Java)
最新推荐文章于 2022-06-12 06:50:22 发布