def find_sum_reverse(n_1: Node, n_2: Node):
    diff = get_size(n_1) - get_size(n_2)
    for i in range(abs(diff)):
        if diff < 0:
            n_1 = add_leading_zero(n_1)
        else:
            n_2 = add_leading_zero(n_2)

    n, carryover = find_sum_r(n_1, n_2)
    if carryover > 0:
        n_result = Node(carryover)
        n_result.tail = n
        return n_result
    return n
def find_sum_r(n_1: Node, n_2: Node):
    d_1 = n_1.data
    d_2 = n_2.data

    if not n_1.tail or not n_2.tail:
        total = d_1 + d_2
        result = total % 10
        carryover = total // 10
        return Node(result), carryover

    n, carryover = find_sum_r(n_1.tail, n_2.tail)
    total = d_1 + d_2 + carryover
    result = total % 10
    carryover = total // 10

    n_result = Node(result)
    n_result.tail = n
    return n_result, carryover
def add_leading_zero(n: Node):
    n_zero = Node(0)
    n_zero.tail = n
    return n_zero
Exemplo n.º 4
0
 def test_get_first_in_loop(self):
     first_node_in_loop = Node('C')
     linked_list = Node('A', Node('B', first_node_in_loop))
     first_node_in_loop.tail = Node('D', Node('E', first_node_in_loop))
     self.assertEqual(first_node_in_loop.data,
                      get_first_in_loop(linked_list).data)