23.合併K個生序連結串列
阿新 • • 發佈:2021-10-30
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 }