【LeetCode热题100(34/100)】合并 K 个升序链表
题目地址:链接
思路: 合并 k 个升序列表,最暴力简单方法直接两两合并,合并 n - 1 次,时间复杂度O(n^2),如果使用分治,时间复杂度 O(nlogn)
/*** 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 n = lists.length;if(n == 0) return null;if(n == 1) return lists[0];let ans = [];for(let i = 0; i < n; i += 2) {if(i + 1 >= n) {ans.push(lists[i]);break;}let dummy = new ListNode(0);let q = dummy;p1 = lists[i];p2 = lists[i + 1];while(p1 && p2) {if(p1.val < p2.val) {q.next = p1;p1 = p1.next;} else {q.next = p2;p2 = p2.next;}q = q.next;}if(p1) q.next = p1;if(p2) q.next = p2;ans.push(dummy.next);}return mergeKLists(ans);
};