19
19
# Time: O(Max(M, N))
20
20
# Space: O(Max(M, N))
21
21
def sum_lists_1 (ll1 , ll2 ):
22
- ll = LL ([])
23
-
24
22
cur = head = Node (None ) # dummy node
25
23
carry , pt1 , pt2 = 0 , ll1 .head , ll2 .head
26
24
while pt1 != None or pt2 != None or carry != 0 :
@@ -35,8 +33,7 @@ def sum_lists_1(ll1, ll2):
35
33
cur .next = Node (value )
36
34
cur = cur .next
37
35
38
- ll .head = head .next
39
- return ll
36
+ return LL (head .next )
40
37
41
38
# Solution: use recursion
42
39
# Time: O(Max(M, N))
@@ -66,8 +63,29 @@ def sum_lists_2_helper(node1, node2, carry):
66
63
)
67
64
return Node (value , next )
68
65
69
-
66
+ # assume ll1 and ll2 has at least 1 node
70
67
def sum_lists_follow_up (ll1 , ll2 ):
68
+ len1 , len2 = ll1 .length (), ll2 .length ()
69
+ head1 , head2 = ll1 .head , ll2 .head
70
+ if len1 < len2 :
71
+ head1 = append_zero_nodes (head1 , len2 - len1 )
72
+ elif len1 > len2 :
73
+ head2 = append_zero_nodes (head2 , len1 - len2 )
74
+ head = sum_lists_follow_up_helper (head1 , head2 )
75
+ ll = LL ([])
76
+ ll .head = head
77
+ return ll
78
+
79
+ # input: n must be positive integer
80
+ def append_zero_nodes (node , num ):
81
+ pt = head = Node (0 )
82
+ for _ in range (num - 1 ):
83
+ pt .next = Node (0 )
84
+ pt = pt .next
85
+ pt .next = node
86
+ return head
87
+
88
+ def sum_lists_follow_up_helper (node1 , node2 ):
71
89
pass
72
90
73
91
class Test (UnitTestBase , unittest .TestCase ):
@@ -90,5 +108,23 @@ def func_eval(self, func, args):
90
108
ll1 , ll2 = args
91
109
return func (ll1 , ll2 )
92
110
111
+ # class TestFollowUp(UnitTestBase, unittest.TestCase):
112
+ # def data_provider(self):
113
+ # return [
114
+ # ((LL([1]), LL([1])), LL([2])),
115
+ # ((LL([1]), LL([9])), LL([1, 0])),
116
+ # ((LL([6, 1, 7]), LL([2, 9, 5])), LL([9, 1, 2])),
117
+ # ((LL([1]), LL([9, 9, 9])), LL([1, 0, 0, 0])),
118
+ # ]
119
+
120
+ # def func_provider(self):
121
+ # return [
122
+ # sum_lists_follow_up,
123
+ # ]
124
+
125
+ # def func_eval(self, func, args):
126
+ # ll1, ll2 = args
127
+ # return func(ll1, ll2)
128
+
93
129
if __name__ == '__main__' :
94
130
unittest .main ()
0 commit comments