└── third.py /third.py: -------------------------------------------------------------------------------- 1 | class Node: 2 | def __init__(self, data, nxt=None): 3 | self.data = data 4 | self.nxt = nxt 5 | 6 | def __str__(self): 7 | return f"[{self.data}]" 8 | 9 | def add_to_end(self, data): 10 | n = self # n = root 11 | while not n.is_last(): 12 | n = n.nxt # n == Node(30) 13 | 14 | n.nxt = Node(data) 15 | 16 | def is_last(self): 17 | if self.nxt is None: 18 | return True 19 | else: 20 | return False 21 | 22 | 23 | class LinkedList: 24 | root: Node 25 | 26 | def __init__(self, data, _root=None): 27 | if not _root: 28 | self.root = Node(data) 29 | 30 | def add_to_end(self, data): 31 | self.root.add_to_end(data) 32 | 33 | def add_to_beginning(self, data): 34 | new_node = Node(data) 35 | second_node = self.root 36 | self.root = new_node 37 | new_node.nxt = second_node 38 | 39 | def add_to_index(self, index, data): 40 | new_node = Node(data) 41 | n = self.root 42 | for i in range(index - 1): 43 | n = n.nxt # [5] 44 | old_next = n.nxt # [10] 45 | n.nxt = new_node # [5] -> [7] 46 | new_node.nxt = old_next # [7] -> [10] 47 | 48 | def get_at_index(self, index): 49 | 50 | n = self.root 51 | for i in range(index): 52 | n = n.nxt 53 | return n.data 54 | 55 | def __str__(self): 56 | linked_arr = [] 57 | n = self.root 58 | while not n.is_last(): 59 | linked_arr.append(str(n)) 60 | n = n.nxt 61 | linked_arr.append(str(n)) 62 | 63 | return " -> ".join(linked_arr) 64 | 65 | def append(self, data): 66 | self.add_to_end(data) 67 | 68 | def __getitem__(self, index): 69 | return self.get_at_index(index) 70 | 71 | def __setitem__(self, index, value): 72 | self.add_to_index(index, value) 73 | 74 | def __iter__(self): 75 | return self 76 | 77 | def __next__(self): 78 | if self.root is None: 79 | raise StopIteration 80 | else: 81 | current = self.root 82 | self.root = self.root.nxt 83 | return current 84 | 85 | l = LinkedList(0) 86 | l.append(1) 87 | l.append(2) 88 | l.append(4) 89 | for el in l: 90 | print(el) --------------------------------------------------------------------------------