go + 分治
package main import . "nc_tools" /* * type ListNode struct{ * Val int * Next *ListNode * } */ /** * * @param lists ListNode类一维数组 * @return ListNode类 */ func mergeKLists(lists []*ListNode) *ListNode { if lists == nil || len(lists) == 0 { return nil } return merges(lists, 0, len(lists)-1) } // 分治 func merges(lists []*ListNode, start, end int) *ListNode { if start == end { return lists[start] } if start > end { return nil } mid := start + (end-start)/2 left := merges(lists, start, mid) right := merges(lists, mid +1, end) return mergeDo(left, right) } // 合并两个链表 func mergeDo(l1, l2 *ListNode) *ListNode{ if l1 == nil { return l2 } if l2 == nil { return l1 } head := &ListNode{} node := head for l1 != nil && l2 != nil { if l1.Val > l2.Val { node.Next = l2 l2 = l2.Next }else{ node.Next = l1 l1 = l1.Next } node = node.Next } if l1 != nil { node.Next = l1 } if l2 != nil { node.Next = l2 } return head.Next }