来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/merge-k-sorted-lists 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

给你一个链表数组,每个链表都已经按升序排列。
请你将所有链表合并到一个升序链表中,返回合并后的链表。

解答

  1. /**
  2. * Definition for singly-linked list.
  3. * function ListNode(val, next) {
  4. * this.val = (val===undefined ? 0 : val)
  5. * this.next = (next===undefined ? null : next)
  6. * }
  7. */
  8. /**
  9. * @param {ListNode[]} lists
  10. * @return {ListNode}
  11. */
  12. const findMinValChain = (lists) => {
  13. let min = Infinity,
  14. minIdx = -1;
  15. for (let i = 0; i < lists.length; i++) {
  16. const head = lists[i];
  17. if (head && min > head.val) {
  18. min = head.val;
  19. minIdx = i;
  20. }
  21. }
  22. return minIdx;
  23. }
  24. var mergeKLists = function(lists) {
  25. let head = new ListNode(),
  26. prev = head;
  27. while (lists.length) {
  28. let chainIdx = findMinValChain(lists),
  29. chainHead = lists[chainIdx];
  30. if (!chainHead) {
  31. lists.splice(chainIdx, 1);
  32. continue;
  33. }
  34. prev.next = chainHead;
  35. prev = prev.next;
  36. if (chainHead && chainHead.next) {
  37. lists[chainIdx] = chainHead.next;
  38. chainHead.next = null;
  39. } else {
  40. lists.splice(chainIdx, 1);
  41. }
  42. }
  43. return head.next;
  44. };