Skip to content
Leetcode
Esc
↑↓navigate↵open⌘Jpreview
On this page

23. Merge k Sorted Lists

You are given an array of k linked-lists lists, each linked-list is sorted in ascending order

Linked List

Example 1:

  • Input: lists = [[1,4,5],[1,3,4],[2,6]]
  • Output: [1,1,2,3,4,4,5,6]
  • Explanation: The linked-lists are: [ 1->4->5, 1->3->4, 2->6 ] merging them into one sorted linked list: 1->1->2->3->4->4->5->6

Example 2:

  • Input: lists = []
  • Output: []

Example 3:

  • Input: lists = [[]]
  • Output: []

Constraints:

  • k == lists.length
  • 0 <= k <= 10^4
  • 0 <= lists[i].length <= 500
  • -10^4 <= lists[i][j] <= 10^4
  • lists[i] is sorted in ascending order.
  • The sum of lists[i].length will not exceed 10^4.

Approach

Solution

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
import heapq


class Solution:
    def mergeKLists(self, lists: List[Optional[ListNode]]) -> Optional[ListNode]:
        heap = []

        # K log K
        for i, node in enumerate(lists):
            if node:
                heapq.heappush(heap, (node.val, i, node))

        D = ListNode()
        cur = D

        # n log k
        while heap:
            val, i, node = heapq.heappop(heap)
            cur.next = node
            cur = node
            node = node.next

            if node:
                heapq.heappush(heap, (node.val, i, node))

        # Time: O(N log k)
        # Space: O(n)
        return D.next

Explanation

Last updated on September 24, 2026

Was this page helpful?