Advertisement
Guest User

Untitled

a guest
Apr 26th, 2017
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.89 KB | None | 0 0
  1. from random import randint
  2.  
  3.  
  4. class LinkedListNode:
  5.  
  6.     def __init__(self, value, nextNode=None, prevNode=None):
  7.         self.value = value
  8.         self.next = nextNode
  9.         self.prev = prevNode
  10.  
  11.     def __str__(self):
  12.         return str(self.value)
  13.  
  14.  
  15. class LinkedList:
  16.  
  17.     def __init__(self, values=None):
  18.         self.head = None
  19.         self.tail = None
  20.         if values is not None:
  21.             self.add_multiple(values)
  22.  
  23.     def __iter__(self):
  24.         current = self.head
  25.         while current:
  26.             yield current
  27.             current = current.next
  28.  
  29.     def __str__(self):
  30.         values = [str(x) for x in self]
  31.         return ' -> '.join(values)
  32.  
  33.     def __len__(self):
  34.         result = 0
  35.         node = self.head
  36.         while node:
  37.             result += 1
  38.             node = node.next
  39.         return result
  40.  
  41.     def add(self, value):
  42.         if self.head is None:
  43.             self.tail = self.head = LinkedListNode(value)
  44.         else:
  45.             self.tail.next = LinkedListNode(value)
  46.             self.tail = self.tail.next
  47.         return self.tail
  48.  
  49.     def add_to_beginning(self, value):
  50.         if self.head is None:
  51.             self.tail = self.head = LinkedListNode(value)
  52.         else:
  53.             self.head = LinkedListNode(value, self.head)
  54.         return self.head
  55.  
  56.     def add_multiple(self, values):
  57.         for v in values:
  58.             self.add(v)
  59.  
  60.     def generate(self, n, min_value, max_value):
  61.         self.head = self.tail = None
  62.         for i in range(n):
  63.             self.add(randint(min_value, max_value))
  64.         return self
  65.  
  66.  
  67. class DoublyLinkedList(LinkedList):
  68.  
  69.     def add(self, value):
  70.         if self.head is None:
  71.             self.tail = self.head = LinkedListNode(value, None, self.tail)
  72.         else:
  73.             self.tail.next = LinkedListNode(value)
  74.             self.tail = self.tail.next
  75.         return self
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement