Categories
interview

Merge K Sorted 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) {
  if (!lists || lists.length === 0)
    return null;
  let last = lists.length - 1;
  while (last != 0) {
    let i = 0;
    let j = last;
    while (i < j) {
      lists[i] = mergeTwoLists(lists[i++], lists[j--]);
      if (i >= j)
        last = j;
    }
  }
  return lists[0];
};


var mergeTwoLists = function(a, b) {
  if (a == null)
    return b;
  if (b === null)
    return a;
  let result = a;
  if (a.val <= b.val) {
    result.next = mergeTwoLists(a.next, b);
  } else {
    result = b;
    result.next = mergeTwoLists(a, b.next);
  }
  return result;
};

Demo