Chapter 7: Miscellaneous
7.1 Copy / Clone Data Structure
def copyRandomList(self, head: 'Node') -> 'Node':
randoms: Dict[Optional['Node'], Optional['Node']] = {}
old_dummy, new_dummy = Node(0), Node(0)
old_dummy.next, new_dummy.next = head, None
old_prev, new_prev = old_dummy, new_dummy
# copy the list except random pointers
while old_prev.next:
new_prev.next = Node(old_prev.next.val)
old_prev = old_prev.next
new_prev = new_prev.next
randoms[old_prev] = new_prev
old_node, new_node = old_dummy.next, new_dummy.next
# all nodes created, just need random pointers filled
while old_node:
new_node.random = randoms[old_node.random] if old_node.random else None
old_node = old_node.next
new_node = new_node.next
return new_dummy.nextLast updated