Ejemplo n.º 1
0
    def test_more_complicated(self):

        start_node = NodeList(1, NodeList(2, NodeList(3, NodeList(4, NodeList(1, None)))))

        self.assertEqual(5, node_len(start_node))

        actual_list = node_remove_dups(start_node)

        self.assertEqual(4, node_len(actual_list))
Ejemplo n.º 2
0
    def test_one_node(self):

        start_node = NodeList(1, None)

        actual_list = node_remove_dups(start_node)

        self.assertEqual(1, node_len(actual_list))
Ejemplo n.º 3
0
    def test_double_2_duplicate(self):

        start_node = NodeList(1, NodeList(1, NodeList(1, None)))

        actual_list = node_remove_dups(start_node)

        self.assertEqual(1, node_len(actual_list))
Ejemplo n.º 4
0
def sum_lists_big_to_small(first_list_start, second_list_start):

    first_len = node_len(first_list_start)
    second_len = node_len(second_list_start)

    # this will be used to shift the smaller one
    difference_len = abs(first_len - second_len)

    if first_len > second_len:
        second_list_start = pad_with_zero(second_list_start, difference_len)
    else:
        first_list_start = pad_with_zero(first_list_start, difference_len)

    result_list = recurrence_sum(first_list_start, second_list_start)

    # due to recurence sum imperfection if first elem is 0 then discard it and shift to next
    if result_list.val == 0:
        result_list = result_list.next

    return result_list
Ejemplo n.º 5
0
def brute_force(start_node, kth):
    length = node_len(start_node)  # O(n)

    if length - kth <= 0:
        return None

    counter = 0
    current_node = start_node

    while current_node != None:
        counter += 1
        if counter >= length - kth:
            return current_node
        current_node = current_node.next

    return None
def is_palindrome(list_start):
    l = node_len(list_start)
    _, result = is_palindrome_recursive(list_start, l)
    return result