Advertisement
Guest User

Untitled

a guest
Feb 24th, 2020
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.39 KB | None | 0 0
  1. class Node:
  2. def __init__(self, nxt=None, value=None, prev=None):
  3. self.value = value
  4. self.next = nxt
  5. self.prev = prev
  6.  
  7. def __str__(self):
  8. return f"{self.value}"
  9.  
  10. class DLL:
  11. def __init__(self):
  12. self.head = Node()
  13. self.tail = Node()
  14. self.size = 0
  15. self.current = self.tail
  16.  
  17.  
  18. def __str__(self):
  19. ret = ""
  20. current = self.head.next
  21. if self.size == 0:
  22. return ret
  23. if current.next == None:
  24. return ret
  25. while current is not self.tail:
  26. ret += str(current) + " "
  27. current = current.next
  28. return ret
  29.  
  30. def __len__(self):
  31. return self.size
  32.  
  33. def insert(self, value):
  34. new_node = Node(value)
  35. new_node.value = value
  36. if self.size == 0:
  37. self.head.next = new_node
  38. self.tail.prev = new_node
  39. new_node.next = self.tail
  40. new_node.prev = self.head
  41. self.size += 1
  42. self.current = new_node
  43. else:
  44. new_node.next = self.current
  45. new_node.prev = self.current.prev
  46. new_node.prev.next = new_node
  47. new_node.next.prev = new_node
  48. self.size += 1
  49. self.current = new_node
  50.  
  51. def remove(self):
  52. self.__remove_node(self.current)
  53.  
  54. def __remove_node(self, node):
  55. if self.size == 0:
  56. return -1
  57. node.next.prev = node.prev
  58. node.prev.next = node.next
  59. node = node.prev
  60. self.size -= 1
  61.  
  62.  
  63. def get_value(self):
  64. return self.current
  65.  
  66. def move_to_next(self):
  67. if self.current.next is self.tail:
  68. return
  69. self.current = self.current.next
  70.  
  71.  
  72. def move_to_prev(self):
  73. """if self.current is self.head:
  74. return
  75. if self.current.prev is self.head:
  76. return
  77. self.current = self.current.prev"""
  78. if self.current.value is not None:
  79. if self.current.prev.value is not None:
  80. self.current = self.current.prev
  81.  
  82. def move_to_pos(self, position):
  83. if 0 <= position <= self.size:
  84. count = 0
  85. node = self.head.next
  86. while count < int(position):
  87. node = node.next
  88. count += 1
  89. self.current = node
  90.  
  91. def remove_all(self, value):
  92. current = self.head
  93. while current is not self.tail:
  94. if current.value == value:
  95. self.__remove_node(current)
  96. current = current.next
  97.  
  98.  
  99. def reverse(self):
  100. front = self.head.next
  101. back = self.tail.prev
  102. while front is not back or front.next is not back:
  103. if front is back:
  104. break
  105. front.value, back.value = back.value, front.value
  106. if front.next is back:
  107. break
  108. front, back = front.next, back.prev
  109.  
  110.  
  111. def sort(self):
  112. if self.size < 2:
  113. return
  114. pivot = self.head.next.next
  115. while pivot is not self.tail:
  116. current = pivot
  117. while current.prev is self.head or current.value < current.prev.value:
  118. current.value, current.prev.value = current.prev.value, current.value
  119. current = current.prev
  120. pivot = pivot.next
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement