Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Node:
- def __init__(self, data, next=None):
- self.__data = data
- self.__next__ = next
- def get_data(self):
- return self.__data
- def change_data(self, new_data):
- self.__data = new_data
- def __str__(self):
- return f'data: {self.__data}, next: {self.__next__.__data if self.__next__ is not None else None}'
- class LinkedList:
- def __init__(self, head=None):
- self.__head__ = head
- self.__length = 0
- def __len__(self):
- length = 0
- if self.__head__ is not None:
- length += 1
- tmp = self.__head__
- while tmp.__next__ is not None:
- length += 1
- tmp = tmp.__next__
- return length
- else:
- return 0
- def append(self, element):
- self.__length += 1
- elem = Node(element, None)
- if self.__head__ is not None:
- tmp = self.__head__
- while tmp.__next__ is not None:
- tmp = tmp.__next__
- tmp.__next__ = elem
- else:
- self.__head__ = elem
- def __str__(self):
- if self.__head__ is not None:
- tmp = self.__head__
- elems = f'{tmp}'
- while tmp.__next__ is not None:
- tmp = tmp.__next__
- elems += "; " + tmp.__str__()
- res = f'LinkedList[length = {self.__length}, [{elems}]]'
- else:
- res = f'LinkedList[]'
- return res
- def pop(self):
- if self.__head__ is None:
- raise IndexError("LinkedList is empty!")
- else:
- tmp1 = self.__head__
- tmp2 = tmp1.__next__
- while tmp2 is not None and tmp2.__next__ is not None and tmp2:
- tmp1 = tmp2
- tmp2 = tmp2.__next__
- if tmp1 == self.__head__ and self.__length == 1:
- self.__head__ = None
- else:
- tmp1.__next__ = None
- self.__length -= 1
- def change_on_end(self, n, new_data):
- if self.__length < n or n <= 0:
- raise KeyError(f"<element> doesn't exist!")
- else:
- tmp = self.__head__
- length = self.__length
- while length != n:
- length -= 1
- tmp = tmp.__next__
- tmp.change_data(new_data)
- def clear(self):
- self.__head__ = None
- self.__length = 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement