Chapter 7: Miscellaneous

7.1 Copy / Clone Data Structure

circle-check

e.g.1 LeetCode: Copy List With Random Pointerarrow-up-right

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.next

e.g.2 LeetCode: Clone Graph

triangle-exclamation

Last updated