Linked Lists
def add_linked_lists(l1, l2):
    """Given two linked lists, treat like numbers and add together.
    l1: the head node of a linked list in "reverse-digit" format
    l2: the head node of another "reverse-digit" format
    Returns: head node of linked list of sum in "reverse-digit" format.
    """
    # START SOLUTION
    out_head = out_tail = None
    carried_over_digit = 0
    # Loop over both lists stopping when *both* lists are done
    while l1 or l2:
        # If not done l1, get digit, move to next. If done, use 0.
        if l1:
            digit1 = l1.data
            l1 = l1.next
        else:
            digit1 = 0
        # If not done l2, get digit, move to next. If done, use 0.
        if l2:
            digit2 = l2.data
            l2 = l2.next
        else:
            digit2 = 0
        # Add together digits (along w/carry) & determine new carry
        new_digit = digit1 + digit2 + carried_over_digit
        carried_over_digit, new_digit = divmod(new_digit, 10)
        # Add to end of our out LL
        if not out_head:
            out_head = out_tail = Node(new_digit)
        else:
            out_tail.next = Node(new_digit)
            out_tail = out_tail.next
    # If we have any carry left over, add a new place for it
    if carried_over_digit:
        out_tail.next = Node(carried_over_digit)
    return out_head