@@ -106,6 +106,24 @@ def append(self, ll: 'LinkedList') -> None:
106
106
ll .head = None
107
107
ll .size = 0
108
108
109
+ def reverse (self ) -> None :
110
+ """
111
+ Reverses this linked list in place
112
+ :return:
113
+ """
114
+ if self .head is None :
115
+ return
116
+ prev = self .head
117
+ self .tail = prev
118
+ curr = prev .next
119
+ self .tail .next = None
120
+ while curr is not None :
121
+ old_next = curr .next
122
+ curr .next = prev
123
+ prev = curr
124
+ curr = old_next
125
+ self .head = prev
126
+
109
127
def __repr__ (self ):
110
128
return self .__str__ ()
111
129
@@ -134,6 +152,20 @@ def __eq__(self, other: object):
134
152
return a is None and b is None
135
153
136
154
155
+ def reverse_linked_list (ll : LinkedList ) -> LinkedList :
156
+ """
157
+ Takes in a linked list and returns a reversed copy
158
+ :param ll: input linked list
159
+ :return: reversed linked list
160
+ """
161
+ output_ll = LinkedList ()
162
+ n = ll .head
163
+ while n is not None :
164
+ output_ll .append_to_head (n .data )
165
+ n = n .next
166
+ return output_ll
167
+
168
+
137
169
def sum_lists_forward (ll1 : LinkedList , ll2 : LinkedList ) -> LinkedList :
138
170
"""
139
171
Will add ll1 and ll2 where each element in the linked lists
@@ -149,26 +181,14 @@ def sum_lists_forward(ll1: LinkedList, ll2: LinkedList) -> LinkedList:
149
181
:param ll2: second input linked list
150
182
:return: a linked list containing the result of the addition
151
183
"""
152
- n1 = ll1 .head
153
- n2 = ll2 .head
154
184
# reverse both lists
155
- reversed_ll1 = LinkedList ()
156
- reversed_ll2 = LinkedList ()
157
- while n1 is not None :
158
- reversed_ll1 .append_to_head (n1 .data )
159
- n1 = n1 .next
160
- while n2 is not None :
161
- reversed_ll2 .append_to_head (n2 .data )
162
- n2 = n2 .next
185
+ reversed_ll1 = reverse_linked_list (ll1 )
186
+ reversed_ll2 = reverse_linked_list (ll2 )
163
187
# then, call sum_lists
164
188
reversed_result = sum_lists (reversed_ll1 , reversed_ll2 )
165
189
# reverse a final time
166
- output_ll = LinkedList ()
167
- n = reversed_result .head
168
- while n is not None :
169
- output_ll .append_to_head (n .data )
170
- n = n .next
171
- return output_ll
190
+ reversed_result .reverse ()
191
+ return reversed_result
172
192
173
193
174
194
def sum_lists (ll1 : LinkedList , ll2 : LinkedList ) -> LinkedList :
0 commit comments