def test_double_slicing(self): node1, node2, node3 = Node(1), Node(2), Node(3) node1.next, node2.next, node3.next = node2, node3, None node1.prev, node2.prev, node3.prev = None, node1, node2 self.double.head = node1 self.double.tail = node3 self.assertEqual(self.double[0].value, 1) self.assertEqual(self.double[1].value, 2) self.assertEqual(self.double[2].value, 3) self.assertRaises(IndexError, lambda val: self.double[val], 3)
def test_iteration_double(self): node1, node2, node3 = Node(1), Node(2), Node(3) node1.next, node2.next, node3.next = node2, node3, None node1.prev, node2.prev, node3.prev = None, node1, node2 self.double.head = node1 self.double.tail = node3 # test __iter__ self.assertEqual([str(i) for i in self.double], [str(i) for i in range(1, 4)]) # test iterating over reversed self.assertEqual([str(i) for i in reversed(self.double)], [str(i) for i in range(3, 0, -1)])
def remove_node(node: LinkedList) -> None: """ Removes given node from linked list :param node: :return: """ if node and node.next: node.value = node.next.value node.next = node.next.next
def test_remove_node(self): head = expect = self.gen_list_from_array([1, 2, 3]) node = Node(0) child = head.next head.next = node node.next = child self.check(head, self.gen_list_from_array([1, 0, 2, 3])) remove_node(node) self.check(head, expect) del node del head del expect head = expect = self.gen_list_from_array([1]) node = Node(10) head.next = node self.check(head, self.gen_list_from_array([1, 10])) remove_node(node) self.check(head, expect)
def push(self, newNode): temp = Node(newNode) temp.next = self.head self.head = temp