def test_problem_2_3(self): n1 = sln.SinglyLinkedNode(1, None) n2 = sln.SinglyLinkedNode(2, n1) n10 = sln.SinglyLinkedNode(10, n2) n5 = sln.SinglyLinkedNode(5, n10) string_representation = '' head = n5 p_2_3.delete_middle(n10) while head is not None: string_representation += str(head.value) head = head.next_node self.assertEqual(string_representation, '521')
def test_problem_2_1_alternative(self): n0 = sln.SinglyLinkedNode(9, None) n1 = sln.SinglyLinkedNode(7, n0) n2 = sln.SinglyLinkedNode(2, n1) n3 = sln.SinglyLinkedNode(5, n2) n4 = sln.SinglyLinkedNode(3, n3) n5 = sln.SinglyLinkedNode(3, n4) n6 = sln.SinglyLinkedNode(7, n5) self.assertEqual('7,3,3,5,2,7,9,', sln.stringify_linked_list(n6)) p_2_1.remove_dups_alternative(n6) self.assertEqual('7,3,5,2,9,', sln.stringify_linked_list(n6))
def test_problem_2_5(self): """ List1: 3 -> 2 -> 4 -> 9 -> NONE List2: -> NONE 9423 + 951 ----- 10374 """ # first list n14 = sln.SinglyLinkedNode(9, None) n13 = sln.SinglyLinkedNode(4, n14) n12 = sln.SinglyLinkedNode(2, n13) n11 = sln.SinglyLinkedNode(3, n12) # second list n23 = sln.SinglyLinkedNode(9, None) n22 = sln.SinglyLinkedNode(5, n23) n21 = sln.SinglyLinkedNode(1, n22) sum_head = p_2_5.sum_lists(n11, n21) list_num = "" while sum_head is not None: list_num = str(sum_head.value) + list_num # careful to reverse order! sum_head = sum_head.next_node self.assertEqual(list_num, '10374')
def test_problem_2_2(self): n0 = sln.SinglyLinkedNode(9, None) n1 = sln.SinglyLinkedNode(7, n0) n2 = sln.SinglyLinkedNode(2, n1) n3 = sln.SinglyLinkedNode(5, n2) n4 = sln.SinglyLinkedNode(3, n3) n5 = sln.SinglyLinkedNode(3, n4) n6 = sln.SinglyLinkedNode(7, n5) self.assertEqual(n2, p_2_2.return_kth_to_last(n6, 3)) self.assertEqual(n5, p_2_2.return_kth_to_last(n6, 6)) self.assertEqual(None, p_2_2.return_kth_to_last(n6, 0))
def test_problem_2_4(self): n1 = sln.SinglyLinkedNode(1, None) n2 = sln.SinglyLinkedNode(2, n1) n10 = sln.SinglyLinkedNode(10, n2) n5_1 = sln.SinglyLinkedNode(5, n10) n8 = sln.SinglyLinkedNode(8, n5_1) n5_0 = sln.SinglyLinkedNode(5, n8) n3 = sln.SinglyLinkedNode(3, n5_0) new_head = p_2_4.partition(n3, 5) string_representation = '' while new_head is not None: string_representation += str(new_head.value) new_head = new_head.next_node self.assertEqual(string_representation, '12358510')
def test_problem_2_8(self): # see problem_2_8_explanation.pdf # example 1 node1_7 = sln.SinglyLinkedNode(7, None) node1_6 = sln.SinglyLinkedNode(6, node1_7) node1_5 = sln.SinglyLinkedNode(5, node1_6) node1_4 = sln.SinglyLinkedNode(4, node1_5) node1_3 = sln.SinglyLinkedNode(3, node1_4) node1_2 = sln.SinglyLinkedNode(2, node1_3) node1_1 = sln.SinglyLinkedNode(1, node1_2) node1_0 = sln.SinglyLinkedNode(0, node1_1) node1_7.next_node = node1_5 self.assertEqual(p_2_8.find_loop(node1_0), node1_5) # example 2 node2_10 = sln.SinglyLinkedNode(7, None) node2_9 = sln.SinglyLinkedNode(7, node2_10) node2_8 = sln.SinglyLinkedNode(7, node2_9) node2_7 = sln.SinglyLinkedNode(7, node2_8) node2_6 = sln.SinglyLinkedNode(6, node2_7) node2_5 = sln.SinglyLinkedNode(5, node2_6) node2_4 = sln.SinglyLinkedNode(4, node2_5) node2_3 = sln.SinglyLinkedNode(3, node2_4) node2_2 = sln.SinglyLinkedNode(2, node2_3) node2_1 = sln.SinglyLinkedNode(1, node2_2) node2_0 = sln.SinglyLinkedNode(0, node2_1) node2_10.next_node = node2_3 self.assertEqual(p_2_8.find_loop(node2_0), node2_3) # example 3 self.assertEqual(p_2_8.find_loop(None), None)
def test_problem_2_7(self): # list 1 node1_6 = sln.SinglyLinkedNode(1, None) node1_5 = sln.SinglyLinkedNode(2, node1_6) node1_4 = sln.SinglyLinkedNode(7, node1_5) node1_3 = sln.SinglyLinkedNode(9, node1_4) node1_2 = sln.SinglyLinkedNode(5, node1_3) node1_1 = sln.SinglyLinkedNode(1, node1_2) node1_0 = sln.SinglyLinkedNode(3, node1_1) # list 2 node2_1 = sln.SinglyLinkedNode(6, node1_4) # intersection point node2_0 = sln.SinglyLinkedNode(4, node2_1) # list 3 node3_1 = sln.SinglyLinkedNode(6, None) node3_0 = sln.SinglyLinkedNode(4, node3_1) self.assertEqual(node1_4, p_2_7.intersection(node2_0, node1_0)) self.assertEqual(None, p_2_7.intersection(node1_0, node3_0)) self.assertEqual(None, p_2_7.intersection(None, None))
def test_problem_2_6(self): # list 1 node1_7 = sln.SinglyLinkedNode(0, None) node1_6 = sln.SinglyLinkedNode(4, node1_7) node1_5 = sln.SinglyLinkedNode(7, node1_6) node1_4 = sln.SinglyLinkedNode(0, node1_5) node1_3 = sln.SinglyLinkedNode(0, node1_4) node1_2 = sln.SinglyLinkedNode(7, node1_3) node1_1 = sln.SinglyLinkedNode(4, node1_2) node1_0 = sln.SinglyLinkedNode(0, node1_1) # list 2 node2_4 = sln.SinglyLinkedNode(3, None) node2_3 = sln.SinglyLinkedNode(5, node2_4) node2_2 = sln.SinglyLinkedNode(2, node2_3) node2_1 = sln.SinglyLinkedNode(5, node2_2) node2_0 = sln.SinglyLinkedNode(3, node2_1) # list 3 node3_5 = sln.SinglyLinkedNode(1, None) node3_4 = sln.SinglyLinkedNode(0, node3_5) node3_3 = sln.SinglyLinkedNode(1, node3_4) node3_2 = sln.SinglyLinkedNode(0, node3_3) node3_1 = sln.SinglyLinkedNode(1, node3_2) node3_0 = sln.SinglyLinkedNode(0, node3_1) # list 4 node4_3 = sln.SinglyLinkedNode("a", None) node4_2 = sln.SinglyLinkedNode("l", node4_3) node4_1 = sln.SinglyLinkedNode("e", node4_2) node4_0 = sln.SinglyLinkedNode("x", node4_1) # list 5 node5_3 = sln.SinglyLinkedNode("A", None) node5_2 = sln.SinglyLinkedNode("B", node5_3) node5_1 = sln.SinglyLinkedNode("B", node5_2) node5_0 = sln.SinglyLinkedNode("A", node5_1) self.assertTrue(p_2_6.palindrome(node1_0)) self.assertTrue(p_2_6.palindrome(node2_0)) self.assertFalse(p_2_6.palindrome(node3_0)) self.assertFalse(p_2_6.palindrome(node4_0)) self.assertTrue(p_2_6.palindrome(node5_0))