题解 | #合并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
}
全部评论

相关推荐

点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务