def test_node_delete(self): node_1 = Node(3) node_2 = Node(4) node_3 = Node(5) node_1.next = node_2 node_2.next = node_3 node_2.prev = node_1 node_3.prev = node_2 node_2.delete() self.assertEqual(node_1.next, node_3) self.assertEqual(node_3.prev, node_1)
def insert_at_beginning(head, data): temp = head new_node = Node(data) new_node.next = temp temp.prev = new_node head = new_node return head
def clone_list(lst): # step 1 # append new nodes after existing nodes current = lst.head while current: current_next = current.next new_node = Node(current.key, current.data + " :: new") current.next = new_node new_node.next = current_next current = current_next # step2 # assign random pointers current = lst.head while current: if current.random: current.next.random = current.random.next current = current.next.next # step 3 # seperate two lists new_list = DoublyList() new_head = lst.head.next new_list.head = new_head old = lst.head new = new_head while old: old.next = new.next old = old.next new.next = old.next if old else None new = new.next if new else None return new_list
def test_has_next(self): node = Node(1) second_node = Node(2) node.next = second_node self.assertIs(node.next, second_node)
from doubly_linked_list import Node, DoublyLinkedList if __name__ == '__main__': llist = DoublyLinkedList() llist.head = Node(1) second = Node(2) third = Node(4) llist.head.next = second second.next = third llist.print_list() llist.insert_after(2, 3) print('\nInserting 3 after 2 ..') llist.print_list() llist.append(5) print('\nAppending 5 ..') llist.print_list() llist.insert_before(2, 0) print('\nInserting 0 before 2 ..') llist.print_list() llist.delete_node_position(4) print('\nDeleting node at position 4 ..') llist.print_list() print('\nCount:', llist.get_count())
def addAtStart(self, value): tempNode = Node(value) self.head.prev = tempNode tempNode.next = self.head self.head = tempNode self.printList()