Advertisement
Guest User

Untitled

a guest
Feb 24th, 2020
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.40 KB | None | 0 0
  1.  
  2. class Node:
  3.  
  4. def __init__(self, data = None, next = None, prev = None):
  5. self.data = data
  6. self.next = next
  7. self.prev = prev
  8.  
  9. class DLL:
  10.  
  11. def __init__(self):
  12. self.head = Node()
  13. self.tail = Node()
  14. self.head.next = self.tail
  15. self.tail.prev = self.head
  16. self.curr = self.tail
  17. self.size = 0
  18. self.pos = 0
  19. #self.reversed = False
  20.  
  21. def insert(self, value):
  22.  
  23. new_node = Node(value)
  24. #if self.reversed:
  25. # new_node.next = self.curr.next
  26. # new_node.prev = self.curr
  27. # self.curr.next.prev = new_node
  28. # self.curr.next = new_node
  29. # self.curr = new_node
  30. # self.size += 1
  31. #if self.pos == self.size and self.size != 0:
  32. # new_node.next = self.tail
  33. # new_node.prev = self.tail.prev
  34. # self.curr.next = self.tail
  35. # self.tail.prev = new_node
  36. # self.curr = new_node
  37.  
  38.  
  39. if self.curr == self.head:
  40.  
  41. print('You SNEAKI MADAFAKKA')
  42. else:
  43. new_node.next = self.curr
  44. new_node.prev = self.curr.prev
  45. self.curr.prev.next = new_node
  46. self.curr.prev = new_node
  47. self.curr = new_node
  48. self.size += 1
  49.  
  50.  
  51.  
  52. def remove(self):
  53. if self.curr.data == None:
  54. return
  55. if self.curr != self.head and self.curr != self.tail:
  56. self.curr.next.prev = self.curr.prev
  57. self.curr.prev.next = self.curr.next
  58. self.size -= 1
  59. #if self.reversed:
  60. # self.curr = self.curr.prev
  61.  
  62. self.curr = self.curr.next
  63.  
  64.  
  65.  
  66. def get_value(self):
  67.  
  68. return self.curr.data
  69.  
  70. def move_to_next(self):
  71.  
  72. #if self.reversed:
  73. # if self.curr.prev != None:
  74. # self.curr = self.curr.prev
  75. # self.pos -= 1
  76.  
  77.  
  78. if self.curr.next != None:
  79. if self.pos >= self.size:
  80. self.pos = self.size
  81.  
  82. else:
  83. self.curr = self.curr.next
  84. self.pos += 1
  85.  
  86. else:
  87.  
  88. return
  89. #print('EKKKI Next REVERSE POS: ', self.pos)
  90.  
  91. def move_to_prev(self):
  92.  
  93. #if self.reversed:
  94. # if self.curr == self.tail:
  95. # self.curr = self.curr.next
  96. # if self.curr.next != self.tail:
  97. # self.curr = self.curr.next
  98. # self.pos += 1
  99. # print('POS' ,self.pos)
  100. #
  101. # else:
  102. # return
  103.  
  104.  
  105. if self.curr == self.head:
  106. self.curr = self.curr.prev
  107.  
  108. if self.curr.prev != self.head:
  109. self.curr = self.curr.prev
  110. self.pos -= 1
  111.  
  112.  
  113.  
  114. else:
  115.  
  116. return
  117.  
  118. def move_to_pos(self, position):
  119.  
  120. if position > self.size or position < 0:
  121. return
  122.  
  123. if self.pos == position:
  124. return
  125.  
  126. if position == self.size:
  127. self.curr = self.tail
  128. #if self.reversed:
  129. # self.pos = 0
  130.  
  131. self.pos = self.size
  132.  
  133.  
  134. else:
  135. if position > self.pos: # move next
  136. while self.pos != position:
  137. self.move_to_next()
  138. #self.move_to_pos(position)
  139.  
  140. elif position < self.pos: # move prev
  141. while self.pos != position:
  142. self.move_to_prev()
  143. #print('PREv')
  144. #print(position,': BIL :',self.pos)
  145. #self.move_to_pos(position)
  146.  
  147. else:
  148. return
  149.  
  150. def remove_all(self, value):
  151.  
  152. #if self.reversed:
  153. # iterator = self.tail.prev
  154. #
  155. # if self.curr.data == value:
  156. # self.curr = self.tail.prev
  157.  
  158.  
  159. iterator = self.head.next
  160. if self.curr.data == value:
  161. self.curr = self.head.next
  162.  
  163. while iterator != None:
  164.  
  165. if iterator.data == value:
  166. iterator.prev.next = iterator.next
  167. iterator.next.prev = iterator.prev
  168. self.size -= 1
  169.  
  170. #if self.reversed:
  171. # iterator = iterator.prev
  172.  
  173. iterator = iterator.next
  174.  
  175. #if self.reversed:
  176. #
  177. # if self.curr.data == value:
  178. # self.curr = self.tail.prev
  179.  
  180. if self.curr.data == value:
  181. self.curr = self.head.next
  182.  
  183. def reverse(self):
  184.  
  185. temp_pointer = None
  186. self.curr = self.head
  187.  
  188. while self.curr != None:
  189. temp_pointer = self.curr.prev
  190. self.curr.prev = self.curr.next
  191. self.curr.next = temp_pointer
  192. self.curr = self.curr.prev
  193. if temp_pointer != None:
  194. self.head = temp_pointer.prev
  195. self.curr = self.head.next
  196.  
  197. def sort(self):
  198.  
  199. if self.head.next == self.tail:
  200. return
  201.  
  202. else:
  203. self.curr = self.head.next
  204.  
  205. while self.curr.next != None:
  206. compare = self.curr.next
  207. while compare.next != None:
  208. if self.curr.data > compare.data:
  209. temp = self.curr.data
  210. self.curr.data = compare.data
  211. compare.data = temp
  212.  
  213. compare = compare.next
  214. self.curr = self.curr.next
  215.  
  216. #self.reversed = False
  217. self.curr = self.head.next
  218. #if self.reversed:
  219. # self.pos = self.size
  220.  
  221. self.pos = 0
  222.  
  223. def __len__(self):
  224.  
  225. return self.size
  226.  
  227. def __str__(self):
  228.  
  229. ret_str = ''
  230.  
  231. #if self.reversed:
  232. # ret_val = self.tail.prev
  233. # while ret_val.prev != None:
  234. # ret_str += str(ret_val.data) + ' '
  235. # ret_val = ret_val.prev
  236.  
  237.  
  238. ret_val = self.head.next
  239. while ret_val.next != None:
  240. ret_str += str(ret_val.data) + ' '
  241. ret_val = ret_val.next
  242.  
  243. return ret_str
  244.  
  245. #def getStatus(self):
  246. # return self.reversed
  247.  
  248. def getPos(self):
  249. return self.pos
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement