合并K个升序链表(Go)
给你一个链表数组,每个链表都已经按升序排列。
请你将所有链表合并到一个升序链表中,返回合并后的链表。
func mergeKLists(lists []*ListNode) *ListNode {
if len(lists)==0{
return nil
}
if len(lists) == 1{
return lists[0]
}
if len(lists) == 2{
return mergeTwoLists(lists[0],lists[1])
}
mid := len(lists)/2
lists1 := lists[:mid]
lists2 := lists[mid:]
return mergeTwoLists(mergeKLists(lists1),mergeKLists(lists2))
}
func mergeTwoLists(l1,l2 *ListNode) *ListNode{
if l1==nil{return l2}
if l2==nil{return l1}
pre := &ListNode{Val:0,Next:nil}
cur := pre
if l1.Val>l2.Val{
cur.Next = l2
cur.Next.Next = mergeTwoLists(l2.Next,l1)
}else{
cur.Next = l1
cur.Next.Next = mergeTwoLists(l1.Next,l2)
}
return pre.Next
}

浙公网安备 33010602011771号