题解 | #合并k个已排序的链表#
合并k个已排序的链表
http://www.nowcoder.com/practice/65cfde9e5b9b4cf2b6bafa5f3ef33fa6
// 遍历合并多个,每次迭代都把上次最新的链的头结点作为参数传入 Merge 方法
func mergeKLists( lists []*ListNode ) *ListNode {
// write code here
n := len(lists)
if n == 0 {
return nil
}
if n == 1 {
return lists[0]
}
var head *ListNode
node0 := lists[0]
for i := 1; i < n; i++ {
head = Merge(node0, lists[i])
node0 = head
}
return node0
}
// 先合并两个
func Merge(node1, node2 *ListNode) *ListNode {
dummy := &ListNode{0, nil}
tmp := dummy
for node1 != nil && node2 != nil {
if node1.Val <= node2.Val {
tmp.Next = node1
node1 = node1.Next
}else {
tmp.Next = node2
node2 = node2.Next
}
tmp = tmp.Next
}
if node1 != nil {
tmp.Next = node1
}
if node2 != nil {
tmp.Next = node2
}
return dummy.Next
}