def test_insert(self): """ Tests the insert(index, data) method """ dll = DoublyLinkedList() # test out of bounds self.assertIsNone(dll.insert(-1, 'data')) self.assertIsNone(dll.insert(1, 'data')) # test inserting at index zero in open list (should use unshift(data)) dll.insert(0, 'node zero') self.assertEqual(dll.length, 1) self.assertEqual(dll.head.data, 'node zero') dll.clear() dll.push(0) # index 0 dll.push(1) # index 1 dll.push(2) # index 2 # insert at index 1 expected_list = [0, 'insert one', 1, 2] self.assertIsInstance(dll.insert(1, 'insert one'), DoublyLinkedList) self.assertEqual(dll.length, 4) self.assertEqual(dll.to_list(), expected_list) # insert at tail, index 4 expected_list = [0, 'insert one', 1, 2, 'insert tail'] self.assertIsInstance(dll.insert(4, 'insert tail'), DoublyLinkedList) self.assertEqual(dll.length, 5) self.assertEqual(dll.to_list(), expected_list)
def main(): # Start with empty list llist = DoublyLinkedList() # Insert 6. So the list becomes 6->None llist.append(6) # Insert 7 at the beginning. # So linked list becomes 7->6->None llist.push(7) # Insert 1 at the beginning. # So linked list becomes 1->7->6->None llist.push(1) # Insert 4 at the end. # So linked list becomes 1->7->6->4->None llist.append(4) # Insert 8, after 7. # So linked list becomes 1->7->8->6->4->None llist.insert(llist.head.next, 8) print('###################') llist.printList() # So linked list becomes 1->7->8->2->6->4->None llist.insertAt(2, 2) llist.printList() print('###################') llist.delete(llist.head) llist.delete(llist.head.next) llist.delete(llist.head.next) llist.printList() print('###################') llist.deleteAt(2) llist.printList()