Advertisement
maxim_shlyahtin

cs_lb2

Apr 3rd, 2023
512
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.45 KB | None | 0 0
  1. class Node:
  2.     def __init__(self, data, next=None):
  3.         self.__data = data
  4.         self.__next__ = next
  5.  
  6.     def get_data(self):
  7.         return self.__data
  8.  
  9.     def change_data(self, new_data):
  10.         self.__data = new_data
  11.  
  12.     def __str__(self):
  13.         return f'data: {self.__data}, next: {self.__next__.__data if self.__next__ is not None else None}'
  14.  
  15.  
  16. class LinkedList:
  17.     def __init__(self, head=None):
  18.         self.__head__ = head
  19.         self.__length = 0
  20.  
  21.     def __len__(self):
  22.         length = 0
  23.         if self.__head__ is not None:
  24.             length += 1
  25.             tmp = self.__head__
  26.             while tmp.__next__ is not None:
  27.                 length += 1
  28.                 tmp = tmp.__next__
  29.             return length
  30.         else:
  31.             return 0
  32.  
  33.     def append(self, element):
  34.         self.__length += 1
  35.         elem = Node(element, None)
  36.         if self.__head__ is not None:
  37.             tmp = self.__head__
  38.             while tmp.__next__ is not None:
  39.                 tmp = tmp.__next__
  40.             tmp.__next__ = elem
  41.         else:
  42.             self.__head__ = elem
  43.  
  44.     def __str__(self):
  45.         if self.__head__ is not None:
  46.             tmp = self.__head__
  47.             elems = f'{tmp}'
  48.             while tmp.__next__ is not None:
  49.                 tmp = tmp.__next__
  50.                 elems += "; " + tmp.__str__()
  51.             res = f'LinkedList[length = {self.__length}, [{elems}]]'
  52.         else:
  53.             res = f'LinkedList[]'
  54.         return res
  55.  
  56.     def pop(self):
  57.         if self.__head__ is None:
  58.             raise IndexError("LinkedList is empty!")
  59.         else:
  60.             tmp1 = self.__head__
  61.             tmp2 = tmp1.__next__
  62.             while tmp2 is not None and tmp2.__next__ is not None and tmp2:
  63.                 tmp1 = tmp2
  64.                 tmp2 = tmp2.__next__
  65.             if tmp1 == self.__head__ and self.__length == 1:
  66.                 self.__head__ = None
  67.             else:
  68.                 tmp1.__next__ = None
  69.             self.__length -= 1
  70.  
  71.     def change_on_end(self, n, new_data):
  72.         if self.__length < n or n <= 0:
  73.             raise KeyError(f"<element> doesn't exist!")
  74.         else:
  75.             tmp = self.__head__
  76.             length = self.__length
  77.             while length != n:
  78.                 length -= 1
  79.                 tmp = tmp.__next__
  80.             tmp.change_data(new_data)
  81.  
  82.     def clear(self):
  83.         self.__head__ = None
  84.         self.__length = 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement