Files
LeetCode-Go/leetcode/0725.Split-Linked-List-in-Parts/725. Split Linked List in Parts.go
halfrost 46faa66642 Merge pull request #60 from halfrost/code_quality_improvement
optimization code quality level from A to A+
2020-08-27 17:41:27 +08:00

81 lines
1.6 KiB
Go

package leetcode
import "fmt"
import (
"github.com/halfrost/LeetCode-Go/structures"
)
// ListNode define
type ListNode = structures.ListNode
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func splitListToParts(root *ListNode, k int) []*ListNode {
res := make([]*ListNode, 0)
if root == nil {
for i := 0; i < k; i++ {
res = append(res, nil)
}
return res
}
length := getLength(root)
splitNum := length / k
lengNum := length % k
cur, head := root, root
var pre *ListNode
fmt.Printf("总长度 %v, 分 %v 组, 前面 %v 组长度为 %v, 剩余 %v 组,每组 %v\n", length, k, lengNum, splitNum+1, k-lengNum, splitNum)
if splitNum == 0 {
for i := 0; i < k; i++ {
if cur != nil {
pre = cur.Next
cur.Next = nil
res = append(res, cur)
cur = pre
} else {
res = append(res, nil)
}
}
return res
}
for i := 0; i < lengNum; i++ {
for j := 0; j < splitNum; j++ {
cur = cur.Next
}
fmt.Printf("0 刚刚出来 head = %v cur = %v pre = %v\n", head, cur, head)
pre = cur.Next
cur.Next = nil
res = append(res, head)
head = pre
cur = pre
fmt.Printf("0 head = %v cur = %v pre = %v\n", head, cur, head)
}
for i := 0; i < k-lengNum; i++ {
for j := 0; j < splitNum-1; j++ {
cur = cur.Next
}
fmt.Printf("1 刚刚出来 head = %v cur = %v pre = %v\n", head, cur, head)
pre = cur.Next
cur.Next = nil
res = append(res, head)
head = pre
cur = pre
}
return res
}
func getLength(l *ListNode) int {
count := 0
cur := l
for cur != nil {
count++
cur = cur.Next
}
return count
}