TheAceHome

Untitled

Apr 23rd, 2019
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.89 KB | None | 0 0
  1. class linkst:
  2. __slots__ = ['data', 'next']
  3. def __init__(self, iterable=(), data=None, next=None):
  4. if iterable is not None:
  5. self.data, self.next = self, None
  6. self.extend(iterable)
  7. else:
  8. self.data, self.next = data, next
  9.  
  10. def empty(self):
  11. return self.next is None
  12.  
  13. def append(self, data):
  14. last = self.data
  15. self.data = last.next = linkst(None, data)
  16.  
  17.  
  18. def insert(self, data, index=0):
  19. curr, cat = self, 0
  20. while cat < index and curr:
  21. curr, cat = curr.next, cat+1
  22. if index<0 or not curr:
  23. raise IndexError(index)
  24. new = linkst(None, data, curr.next)
  25. if curr.next is None: self.data = new
  26. curr.next = new
  27.  
  28. def reverse(self):
  29. current, prev = self.next, None
  30. while current:
  31. next = current.next
  32. current.next = prev
  33. prev, current = current, next
  34. if self.next: self.data = self.next
  35. self.next = prev
  36.  
  37. def delete(self, index=0):
  38. curr, cat = self, 0
  39. while cat < index and curr.next:
  40. curr, cat = curr.next, cat+1
  41. if index<0 or not curr.next:
  42. raise IndexError(index)
  43. curr.next = curr.next.next
  44. if curr.next is None:
  45. self.data = curr
  46.  
  47. def remove(self, data):
  48. current = self
  49. while current.next:
  50. if data == current.next.data: break
  51. current = current.next
  52. else: raise ValueError(data)
  53. current.next = current.next.next
  54. if current.next is None:
  55. self.data = current
  56.  
  57. def __contains__(self, data):
  58. current = self.next
  59. while current:
  60. if data == current.data:
  61. return True
  62. current = current.next
  63. return False
  64.  
  65. def __iter__(self):
  66. itr = linkst()
  67. itr.next = self.next
  68. return itr
  69.  
  70. def __next__(self):
  71. if self.data is not self or self.next is None:
  72. raise StopIteration()
  73. next = self.next
  74. self.next = next.next
  75. return next.data
  76.  
  77. def __repr__(self):
  78. return 'linkst(%r)'%list(self)
  79.  
  80. def __str__(self):
  81. return '->'.join(str(i) for i in self)
  82.  
  83.  
  84. def extend(self, iterable):
  85. last = self.data
  86. for i in iterable:
  87. last.next = linkst(None, i)
  88. last = last.next
  89. self.data = last
  90.  
  91. def index(self, data):
  92. current, idx = self.next, 0
  93. while current:
  94. if current.data == data: return idx
  95. current, idx = current.next, idx+1
  96. raise ValueError(data)
  97.  
  98. a=linkst()
  99. a.append(6)
  100. a.append(5)
  101. a.append(5)
  102. a.append(12)
  103. a.append(32)
  104. print(a)
  105. a.remove(5)
  106. print(a)
  107. for i in a:
  108. print (i)
  109. if 6 in a:
  110. print("123")
Advertisement
Add Comment
Please, Sign In to add comment