Skip to content

Commit 9d286f0

Browse files
committed
reverse copy and in-place, update soln
1 parent 222cec6 commit 9d286f0

File tree

1 file changed

+36
-16
lines changed

1 file changed

+36
-16
lines changed

Python/chapter02/2.5 - Sum Lists/miguel_2.5_soln.py

Lines changed: 36 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,24 @@ def append(self, ll: 'LinkedList') -> None:
106106
ll.head = None
107107
ll.size = 0
108108

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+
109127
def __repr__(self):
110128
return self.__str__()
111129

@@ -134,6 +152,20 @@ def __eq__(self, other: object):
134152
return a is None and b is None
135153

136154

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+
137169
def sum_lists_forward(ll1: LinkedList, ll2: LinkedList) -> LinkedList:
138170
"""
139171
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:
149181
:param ll2: second input linked list
150182
:return: a linked list containing the result of the addition
151183
"""
152-
n1 = ll1.head
153-
n2 = ll2.head
154184
# 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)
163187
# then, call sum_lists
164188
reversed_result = sum_lists(reversed_ll1, reversed_ll2)
165189
# 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
172192

173193

174194
def sum_lists(ll1: LinkedList, ll2: LinkedList) -> LinkedList:

0 commit comments

Comments
 (0)