1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- from typing import Union, Any
- from dataclasses import dataclass
- class ListIsEmpty(Exception):
- pass
- @dataclass
- class Node:
- value: Any
- next_: Any
- class LinkedList:
- def __init__(self):
- self.__head: Union[None, Node] = None
-
- def __getitem__(self, n: int) -> Any:
- if self.__head is None:
- raise ListIsEmpty()
- i = 0
- ptr = self.__head
- while i < n:
- if ptr.next_ is None:
- raise IndexError()
- i += 1
- ptr = ptr.next_
- return ptr.value
- def __setitem__(self, n: int, value: Any):
- ptr = self.__head
- for i in range(n):
- ptr = ptr.next_
- print(f"At {i}")
- ptr.value = value
- def index(self, value: Any) -> int:
- ptr = self.__head
- i = 0
- while True:
- if ptr.value == value:
- return i
- else:
- i += 1
- ptr = ptr.next_
- if ptr is None:
- break
- raise ValueError()
- def append(self, value: Any):
- ptr = self.__head
- if ptr is None:
- self.__head = Node(value=value, next_=None)
- return
- while True:
- if ptr.next_ is None:
- break
- ptr = ptr.next_
- ptr.next_ = Node(value, next_=None)
- def prepend(self, value: Any):
- new_node = Node(value=value, next_=self.__head)
- self.__head = new_node
|