1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
func splitListToParts(head *ListNode, k int) []*ListNode {
// 计算链表的长度
length := 0
for cur := head; cur != nil; cur = cur.Next {
length++
}
// 计算每个部分的基本长度和额外节点数
partSize := length / k
extraSize := length % k
// 创建结果数组
res := make([]*ListNode, k)
cur := head
for i := 0; i < k; i++ {
res[i] = cur
// 计算当前部分的长度
size := partSize
if i < extraSize {
size++ // 前面部分多一个节点
}
// 遍历当前部分
for j := 0; j < size && cur != nil; j++ {
if j == size-1 {
next := cur.Next
cur.Next = nil // 断开链表
cur = next
} else {
cur = cur.Next
}
}
}
return res
}
|