

优先队列或者进行排序
package mainimport ("container/heap""fmt""sort")type ListNode struct {Val intNext *ListNode}type NodeSlice []*ListNodefunc (p NodeSlice) Len() int { return len(p) }func (p NodeSlice) Less(i, j int) bool { return p[i].Val < p[j].Val }func (p NodeSlice) Swap(i, j int) { p[i], p[j] = p[j], p[i] }func (p *NodeSlice) Push(x interface{}) {node := x.(*ListNode)*p = append(*p, node)}func (p *NodeSlice) Pop() interface{} {old := *pn := len(old)item := old[n-1]*p = old[0 : n-1]return item}func mergeKLists(lists []*ListNode) *ListNode {dummyHead := &ListNode{Val: -1,Next: nil,}curr := dummyHeadnodeList := make(NodeSlice, 0)for i := range lists {if lists[i] != nil {nodeList = append(nodeList, lists[i])}}heap.Init(&nodeList)for len(nodeList) > 0 {item := heap.Pop(&nodeList).(*ListNode)// 最小元素next := item.Nextitem.Next = nilcurr.Next = itemcurr = itemif next != nil {heap.Push(&nodeList, next)}}return dummyHead.Next}func mergeKLists1(lists []*ListNode) *ListNode {dummyHead := &ListNode{Val: -1,Next: nil,}nodeList := make(NodeSlice, 0)for i := range lists {h :=lists[i]for h!= nil {nodeList = append(nodeList, h)h=h.Next}}sort.Sort(nodeList)curr := dummyHeadfor _,v :=range nodeList{curr.Next = vcurr = v}return dummyHead.Next}func main() {a1 :=ListNode{Val: 1,}b1 :=&ListNode{Val: 4,}a1.Next = b1c1 :=ListNode{Val: 5,}b1.Next =&c1a2 :=ListNode{Val: 1,}b2 :=ListNode{Val: 3,}a2.Next = &b2c2 :=ListNode{Val: 4,}b2.Next =&c2a3 :=ListNode{Val: 2,}b3 :=ListNode{Val: 6,}a3.Next =&b3r := mergeKLists([]*ListNode{&a1,&a2,&a3,nil})for r!= nil{fmt.Println(r.Val)r = r.Next}}
// [[-6,-4,0,0,4],[],[-4,-2,-1,1,2,3],[-9,-6,-5,-2,4,4],[-9,-6,-5,-2,-1,3],[-2,-1,0],[-6],[-8,-1,0,2]]
