分治思想
arr数组内的链表都是有序的,所以使用二分法+递归思想,拆分为单个链表,于是问题就转化为合并两个有序链表的问题,两个链表合并,取首位做比较,谁小,就拆一个,然后拆完后剩下的链表依然是看做一个完整的链表,于是进一步拆分两个子链表,直到有一个链表为空了,于是就返回另外一个链表就行
var mergeKLists = function (arr) {
var len = arr.length;
if (len < 2) {
return arr[0] || null;
}
var mid =len >> 1;
return merge(mergeKLists(arr.slice(0, mid)), mergeKLists(arr.slice(mid)));
};
var merge = function (l1, l2) {
if (!l1) return l2
if (!l2) return l1
var p;
if (l1.val > l2.val) {
p = l2;
p.next = merge(l1, l2.next);
} else {
p = l1;
p.next = merge(l1.next, l2);
}
return p;
};