# 23. 合并 K 个升序链表

给你一个链表数组,每个链表都已经按升序排列。

请你将所有链表合并到一个升序链表中,返回合并后的链表。

# 解题思路

  • 暴力法

每次找到两个最小的链表,合并后插入到结果链表中。

var mergeKLists = function (lists) {
  if (lists.length === 0) return null

  let head = null
  let newList = lists.filter((item) => {
    if (item) head = item

    return item
  })

  if (!head) return null
  head = null
  let curr = null

  while (newList.length) {
    let nextNode = null
    let idx = -1

    newList.forEach((item, i) => {
      if (!nextNode || item.val < nextNode.val) {
        nextNode = item
        idx = i
      }
    })

    if (!head) {
      head = curr = nextNode
    } else {
      curr.next = nextNode
      curr = nextNode
    }

    newList[idx] = newList[idx].next
    nextNode.next = null
    newList = newList.filter((item) => item)
  }

  return head
}

其它解法参考官方题解 (opens new window)

# 参考