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
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)