Add solution for neetcode: merge k sorted linked lists
This commit is contained in:
parent
24d6a5c0f3
commit
e37b949c18
2 changed files with 80 additions and 0 deletions
25
neetcode/linked_list/merge_k_sorted_ll/README.md
Normal file
25
neetcode/linked_list/merge_k_sorted_ll/README.md
Normal 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
|
55
neetcode/linked_list/merge_k_sorted_ll/solution.py
Normal file
55
neetcode/linked_list/merge_k_sorted_ll/solution.py
Normal 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
|
Loading…
Reference in a new issue