From 24312437ebc3be470015efbb18279e7e57717557 Mon Sep 17 00:00:00 2001 From: Prad Nukala Date: Mon, 14 Sep 2026 12:49:55 -0400 Subject: [PATCH] =?UTF-8?q?feat(work):=20add=20solution=20for=20LeetCode?= =?UTF-8?q?=2023=E2=80=AFMerge=E2=80=AFk=E2=80=AFSorted=E2=80=AFLists?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Linked List/23.merge-k-sorted-lists.py | 87 +++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 work/1/Hard/Linked List/23.merge-k-sorted-lists.py diff --git a/work/1/Hard/Linked List/23.merge-k-sorted-lists.py b/work/1/Hard/Linked List/23.merge-k-sorted-lists.py new file mode 100644 index 0000000..eae790a --- /dev/null +++ b/work/1/Hard/Linked List/23.merge-k-sorted-lists.py @@ -0,0 +1,87 @@ +""" +23. Merge k Sorted Lists +Difficulty: Hard +https://leetcode.com/problems/merge-k-sorted-lists/ + +────────────────────────────────────────────────── + +You are given an array of k linked-lists lists, each linked-list is +sorted in ascending order. + +Merge all the linked-lists into one sorted linked-list and return it. + + + +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. +""" + +# 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