package main import . "nc_tools" /* * type ListNode struct{ * Val int * Next *ListNode * } */ /** * * @param lists ListNode类一维数组 * @return ListNode类 */ func mergeKLists( lists []*ListNode ) *ListNode { return merge(lists, 0, len(lists)-1) } func merge(list []*ListNode, left, right int) *ListNode { if left == right { return list[left] } if left > right { return nil } mid := left + (right-left)/2 return mergeTwoList(merge(list, left, mid), merge(list, mid+1, right)) } func mergeTwoList(list1, list2 *ListNode) *ListNode { res := &ListNode{Val: 0} tmp := res for list1 != nil && list2 != nil { if list1.Val > list2.Val { tmp.Next = &ListNode{Val: list2.Val} tmp = tmp.Next list2 = list2.Next } else { tmp.Next = &ListNode{Val: list1.Val} tmp = tmp.Next list1 = list1.Next } } if list1 != nil { tmp.Next = list1 } if list2 != nil { tmp.Next = list2 } return res.Next }