给你一个链表数组,每个链表都已经按升序排列。
请你将所有链表合并到一个升序链表中,返回合并后的链表。
示例 1:
输入: lists = [[1,4,5],[1,3,4],[2,6]]
输出: [1,1,2,3,4,4,5,6]
解释:链表数组如下:
[
1->4->5,
1->3->4,
2->6
]
将它们合并到一个有序链表中得到。
1->1->2->3->4->4->5->6
示例 2:
输入: lists = []
输出: []
示例 3:
输入: lists = [[]]
输出: []
package mergeKLists
type ListNode struct {
Val int
Next *ListNode
}
func mergeKLists(lists []*ListNode) *ListNode {
if len(lists) == 0 {
return nil
}
for len(lists) > 1 {
//去除最开始的两项
item1 := lists[0]
item2 := lists[1]
lists = lists[2:]
//先两两合并
mergedLists := mergeTwoLists(item1, item2)
//合并完把合并结果加入到数组中
lists = append(lists, mergedLists)
}
return lists[0]
}
func mergeTwoLists(list1 *ListNode, list2 *ListNode) *ListNode {
var preHead = new(ListNode)
var ret = preHead
for list1 != nil && list2 != nil {
if list1.Val < list2.Val {
preHead.Next = list1
list1 = list1.Next
} else {
preHead.Next = list2
list2 = list2.Next
}
preHead = preHead.Next
}
if list1 != nil {
preHead.Next = list1
}
if list2 != nil {
preHead.Next = list2
}
return ret.Next
}