合并K个有序列表 不用递归, 数组原地首尾合并

合并k个已排序的链表

http://www.nowcoder.com/questionTerminal/65cfde9e5b9b4cf2b6bafa5f3ef33fa6

头和尾合并
lists[0], lists[n-1]; 把lists[n-1]合并到lists[0]上
lists[1], lists[n-2]
...
直到数组长度为1

package main
import . "nc_tools"
/*
 * type ListNode struct{
 *   Val int
 *   Next *ListNode
 * }
 */

/**
 * 
 * @param lists ListNode类一维数组 
 * @return ListNode类
*/
func merge( a,b *ListNode ) *ListNode {
    var L ListNode
    var p *ListNode = &L

    for a != nil && b != nil {
        if a.Val <= b.Val {
            p.Next = a
            p = a;
            a = a.Next
            p.Next = nil
        }else {
            p.Next = b;
            p = b;
            b = b.Next;
            p.Next = nil;
        }
    }
    if a != nil {
        p.Next = a;
    }else {
        p.Next = b;
    }

    return L.Next;
}

func mergeKLists( lists []*ListNode ) *ListNode {
    // write code here

    listsLen := len(lists)
    j := listsLen - 1
    if listsLen <= 0 {
        return nil;
    }
    if listsLen <= 1 {
        return lists[0];
    }
    for j >= 1 {
        for i:= 0; i < j; i++ {
            lists[i] = merge(lists[i], lists[j])
            j--
        }
    }

    return lists[0];

}
全部评论

相关推荐

理智的芭乐在查重:这边男朋友还有hc吗
点赞 评论 收藏
分享
爱读书的放鸽子能手很...:刷个两端实习,冲春招,流水线什么时候不能去
我的秋招日记
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务