Advertisement
Guest User

Untitled

a guest
Mar 20th, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.30 KB | None | 0 0
  1. class Node:
  2.     def __init__(self, init_data):
  3.         self.data = init_data
  4.         self.next = None
  5.  
  6.     def get_data(self):
  7.         return self.data
  8.  
  9.     def get_next(self):
  10.         return self.next
  11.  
  12.     def set_data(self, new_data):
  13.         self.data = new_data
  14.  
  15.     def set_next(self, new_next):
  16.         self.next = new_next
  17.  
  18.  
  19. class List:
  20.     def __init__(self):
  21.         self.head = None
  22.         self.length = 0
  23.  
  24.     def __iter__(self):
  25.         current = self.head
  26.         while current is not None:
  27.             yield current.get_data()
  28.             current = current.get_next()
  29.  
  30.     def __str__(self):
  31.         result = ""
  32.         for x in list:
  33.             result += str(x)
  34.             result += " "
  35.         return result.strip()
  36.  
  37.     def is_empty(self):
  38.         return self.head is None
  39.  
  40.     def size(self):
  41.         return self.length
  42.  
  43.     def search(self, item):
  44.         return item in self
  45.  
  46.     # mógłby mieć złożoność stałą, ale wtedy
  47.     # generator zwraca odwrotną kolejność
  48.     # O(n)
  49.     def append(self, data):
  50.         self.length += 1
  51.         if self.head is None:
  52.             self.head = Node(data)
  53.             return
  54.         current = self.head
  55.         while current.get_next() is not None:
  56.             current = current.get_next()
  57.         current.set_next(Node(data))
  58.  
  59.     # O(pos)
  60.     def pop(self, pos):
  61.         current = self.head
  62.         if pos < 0:
  63.             raise ValueError('Position < 0')
  64.         elif pos == 0:
  65.             self.head = current.get_next()
  66.         else:
  67.             for i in range(0, pos):
  68.                 current = current.get_next()
  69.             next_node = current.get_next()
  70.             current.set_next(next_node)
  71.  
  72.         self.length -= 1
  73.         return current.get_data()
  74.  
  75.     # O(pos)
  76.     def insert(self, pos, item):
  77.         current = self.head
  78.         if pos < 0:
  79.             raise ValueError('Position < 0')
  80.  
  81.         if pos == 0:
  82.             self.head = Node(item)
  83.             self.head.set_next(current)
  84.             self.length += 1
  85.             return
  86.  
  87.         for i in range(0, pos):
  88.             current = current.get_next()
  89.         next_node = current.get_next()
  90.         to_insert = Node(item)
  91.         current.set_next(to_insert)
  92.         to_insert.set_next(next_node)
  93.         self.length += 1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement