1
+ from typing import Optional
2
+
3
+
4
+ class ListNode :
5
+ def __init__ (self , val = 0 , next = None ):
6
+ self .val = val
7
+ self .next = next
8
+
9
+ def __str__ (self ):
10
+ s = self
11
+ ret = []
12
+ while s :
13
+ ret .append (s .val )
14
+ s = s .next
15
+ return str (ret )
16
+
17
+
18
+ def mergeTwoLists (l1 : ListNode , l2 : ListNode ) -> ListNode :
19
+ if not l1 :
20
+ return l2
21
+ if not l2 :
22
+ return l1
23
+
24
+ if l1 .val < l2 .val :
25
+ result = l1 .val
26
+ l1 = l1 .next
27
+ else :
28
+ result = l2 .val
29
+ l2 = l2 .next
30
+
31
+ return ListNode (result , mergeTwoLists (l1 , l2 ))
32
+
33
+ def mergeKLists (lists : list [Optional [ListNode ]]) -> Optional [ListNode ]:
34
+ nodes = []
35
+ result = curr = ListNode ()
36
+
37
+ for lst in lists :
38
+ while lst :
39
+ nodes .append (lst .val )
40
+ lst = lst .next
41
+
42
+ for node in sorted (nodes ):
43
+ curr .next = ListNode (node )
44
+ curr = curr .next
45
+
46
+ return result .next
47
+
48
+
49
+ if __name__ == "__main__" :
50
+ # TESTS
51
+ l1 = ListNode (1 , ListNode (4 , ListNode (81 )))
52
+ l2 = ListNode (1 , ListNode (3 , ListNode (4 )))
53
+ l3 = ListNode (2 , ListNode (3 , ListNode (5 )))
54
+ l4 = ListNode (2 , ListNode (3 , ListNode (5 )))
55
+ l5 = ListNode (2 , ListNode (26 , ListNode (73 )))
56
+ l6 = ListNode (2 , ListNode (3 , ListNode (62 )))
57
+ l7 = ListNode (6 , ListNode (10 , ListNode (20 )))
58
+ l8 = ListNode (2 , ListNode (3 , ListNode (51 )))
59
+ l9 = ListNode (2 , ListNode (3 , ListNode (12 )))
60
+ l10 = ListNode (3 , ListNode (10 , ListNode (20 )))
61
+ l11 = ListNode (2 , ListNode (3 , ListNode (5 )))
62
+ l12 = ListNode (2 , ListNode (3 , ListNode (66 )))
63
+ l13 = ListNode (5 , ListNode (6 , ListNode (6 )))
64
+
65
+ print (mergeTwoLists (l1 , l2 ))
66
+ print (mergeKLists ([l1 , l2 , l3 , l4 , l5 , l6 , l7 , l8 , l9 , l10 , l11 , l12 , l13 ]))
0 commit comments