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
}