leetcode23.合并K个生序链表

23.合并K个生序链表

题目

给你一个链表数组,每个链表都已经按升序排列。

请你将所有链表合并到一个升序链表中,返回合并后的链表。

用例

输入: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
输入:lists = []
输出:[]
输入:lists = [[]]
输出:[]

求解

/**
 * Definition for singly-linked list.
 * function ListNode(val, next) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.next = (next===undefined ? null : next)
 * }
 */
/**
 * @param {ListNode[]} lists
 * @return {ListNode}
 */
var mergeKLists = function(lists) {
    let len = lists.length;
    let res = null;
    let flag = [];
    let true_num = 0;
    let p=null;

    for(let i =0; i<len; i++){
        if(lists[i]!=null){
           flag.push(true) 
           true_num++
        }else{
            flag.push(false)
        }
    }
    while(true_num>0){
        let min_node = null
        let min = null;
        for(let j = 0;j<len;j++){
            //链表还有节点,就继续
            if(flag[j]==true){
                if(min_node == null){
                    min_node = lists[j]
                    min = j
                }else{
                    if(min_node.val>lists[j].val){
                        min_node = lists[j]
                        min = j
                    }
                }
            }
        }
        if(res == null){
            res = min_node;
            p=res;
            lists[min] = lists[min].next;
            if(lists[min]==null){
                flag[min] = false
                true_num--
            }
        }else{
            p.next=min_node;
            p = p.next;
            lists[min] = lists[min].next;
            if(lists[min]==null){
                flag[min] = false
                true_num--
            }
        }
    }
    return res
}
posted @ 2021-10-30 12:29  BONiii  阅读(57)  评论(0)    收藏  举报