Add solution for neetcode: merge k sorted linked lists

This commit is contained in:
pro100ton 2025-02-19 22:33:26 +03:00
parent 24d6a5c0f3
commit e37b949c18
2 changed files with 80 additions and 0 deletions

View file

@ -0,0 +1,25 @@
Merge K Sorted Linked Lists
You are given an array of k linked lists lists, where each list is sorted in ascending order.
Return the sorted linked list that is the result of merging all of the individual linked lists.
Example 1:
Input: lists = [[1,2,4],[1,3,5],[3,6]]
Output: [1,1,2,3,3,4,5,6]
Example 2:
Input: lists = []
Output: []
Example 3:
Input: lists = [[]]
Output: []
Constraints:
0 <= lists.length <= 1000
0 <= lists[i].length <= 100
-1000 <= lists[i][j] <= 1000

View file

@ -0,0 +1,55 @@
from typing import List, Optional
# Definition for singly-linked list.
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
class Solution:
def merge2lists(self, l1: ListNode, l2: ListNode) -> ListNode:
dummy = node = ListNode()
while l1 and l2:
if l1.val < l2.val:
node.next = l1
l1 = l1.next
else:
node.next = l2
l2 = l2.next
node = node.next
node.next = l1 or l2
return dummy.next
def mergeKLists(self, lists: List[Optional[ListNode]]) -> Optional[ListNode]:
if len(lists) == 0 or not lists:
return None
if len(lists) == 1:
return lists[0]
middle = int(len(lists) / 2)
breakpoint()
left_side = self.mergeKLists(lists[0:middle])
right_side = self.mergeKLists(lists[middle:])
return self.merge2lists(left_side, right_side)
if __name__ == "__main__":
s = Solution()
e3 = ListNode(3, None)
e2 = ListNode(2, e3)
e1 = ListNode(1, e2)
k3 = ListNode(5, None)
k2 = ListNode(3, k3)
k1 = ListNode(2, k2)
k0 = ListNode(0, k1)
s= Solution()
k = s.mergeKLists([e1, k0])
while k:
print(f"{k.val}")
k = k.next