题解 | #合并k个已排序的链表#
合并k个已排序的链表
https://www.nowcoder.com/practice/65cfde9e5b9b4cf2b6bafa5f3ef33fa6
package main
import . "nc_tools"
/*
* type ListNode struct{
* Val int
* Next *ListNode
* }
*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param lists ListNode类一维数组
* @return ListNode类
*/
func mergeKLists(lists []*ListNode) *ListNode {
// write code here
if len(lists) == 0 {
return nil
} else if len(lists) == 1 {
return lists[0]
} else {
return mergeTwoLists(mergeKLists(lists[:len(lists)/2]), mergeKLists(lists[len(lists)/2:]))
}
}
func mergeTwoLists(list1 *ListNode, list2 *ListNode) *ListNode {
l1 := make([]*ListNode, 0)
l2 := make([]*ListNode, 0)
node1, node2 := list1, list2
for node1 != nil {
l1 = append(l1, node1)
node1 = node1.Next
}
for node2 != nil {
l2 = append(l2, node2)
node2 = node2.Next
}
i, j := len(l1)-1, len(l2)-1
for i >= 0 && j >= 0 {
if l1[i].Val > l2[j].Val {
i--
} else {
next := l1[i].Next
l1[i].Next = l2[j]
l2[j].Next = next
j--
}
}
var head *ListNode
if j >= 0 {
if len(l1) > 0 {
l2[j].Next = l1[0]
head = l2[0]
} else {
head = list2
}
} else {
if len(l1) > 0 {
head = l1[0]
} else {
head = list1
}
}
return head
}