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))
def test_one_node(self): start_node = NodeList(1, None) actual_list = node_remove_dups(start_node) self.assertEqual(1, node_len(actual_list))
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))
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
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