lc-go/solutions/0/q23/solution.go
2026-01-25 11:56:12 +09:00

52 lines
975 B
Go

package q23
import "container/heap"
type ListNode struct {
Val int
Next *ListNode
}
type MinNodeHp []*ListNode
func (m *MinNodeHp) Len() int { return len(*m) }
func (m *MinNodeHp) Less(i int, j int) bool { return (*m)[i].Val < (*m)[j].Val }
func (m *MinNodeHp) Push(x any) { *m = append(*m, x.(*ListNode)) }
func (m *MinNodeHp) Swap(i int, j int) { (*m)[i], (*m)[j] = (*m)[j], (*m)[i] }
func (m *MinNodeHp) Pop() any {
*m = (*m)[:len(*m)-1]
return nil
}
var _ heap.Interface = &MinNodeHp{}
func mergeKLists(lists []*ListNode) *ListNode {
hp := make(MinNodeHp, 0, len(lists))
for i := range lists {
if lists[i] != nil {
hp = append(hp, lists[i])
}
}
heap.Init(&hp)
head := &ListNode{}
tail := head
for len(hp) > 0 {
tail.Next = hp[0]
tail = tail.Next
hp[0] = hp[0].Next
if hp[0] == nil {
heap.Remove(&hp, 0)
} else {
heap.Fix(&hp, 0)
}
}
tail.Next = nil
return head.Next
}
var _ = mergeKLists