Advertisement
Guest User

Python Double Linked List

a guest
Nov 17th, 2018
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.70 KB | None | 0 0
  1. class Node:
  2.   def __init__(self, data, prev=None, next=None):
  3.     self.data = data
  4.     self.prev = prev
  5.     self.next = next
  6.  
  7.   def __str__(self):
  8.     return str(self.data)
  9.  
  10.  
  11. class DLL:
  12.   def __init__(self, head):
  13.     self.head = head
  14.  
  15.  
  16.   def addFront(self, data):
  17.     new_node = Node(data)
  18.  
  19.     new_node.next = self.head
  20.     if self.head:
  21.       self.head.prev = new_node
  22.    
  23.     self.head = new_node
  24.  
  25.  
  26.   def insertAfter(self, prev_node, new_data):
  27.     if prev_node is None:
  28.       raise Exception("prev_node must be specified!")
  29.  
  30.     new_node = Node(new_data)
  31.  
  32.     new_node.next = prev_node.next
  33.     new_node.prev = prev_node
  34.  
  35.     if prev_node.next:
  36.       prev_node.next.prev = new_node
  37.  
  38.     prev_node.next = new_node
  39.  
  40.  
  41.   def append(self, data):
  42.     new_node = Node(data)
  43.  
  44.     if not self.head:
  45.       self.head = new_node
  46.       return
  47.  
  48.     cur_node = self.head
  49.     while cur_node.next:
  50.       cur_node = cur_node.next
  51.    
  52.     cur_node.next = new_node
  53.     new_node.prev = cur_node
  54.  
  55.  
  56.   def insertBefore(self, next_node, data):
  57.     new_node = Node(data)
  58.  
  59.     if next_node is None:
  60.       raise Exception('next_node is not provided!')
  61.  
  62.     new_node.next = next_node
  63.     new_node.prev = next_node.prev
  64.  
  65.     next_node.prev = new_node
  66.  
  67.     if new_node.prev:
  68.       new_node.prev.next = new_node
  69.    
  70.  
  71.   def __traverse(self, node):
  72.     if node:
  73.       print("{} === {} === {}".format(node.prev, node.data, node.next))
  74.       self.__traverse(node.next)
  75.  
  76.  
  77.   def traverse(self):
  78.     self.__traverse(self.head)
  79.  
  80.  
  81. n1 = Node(4)
  82. dll = DLL(n1)
  83. dll.addFront(3)
  84. dll.addFront(56)
  85. dll.addFront(32)
  86.  
  87. dll.insertAfter(n1, 23)
  88. dll.insertAfter(n1, 22)
  89.  
  90. dll.traverse()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement