56 lines
1.9 KiB
Python
56 lines
1.9 KiB
Python
from dataclasses import dataclass
|
|
from typing import Iterator, Optional
|
|
|
|
@dataclass
|
|
class Node[T]:
|
|
value: T
|
|
next_node: Optional['Node[T]']
|
|
|
|
|
|
@dataclass
|
|
class LinkedList[T]:
|
|
|
|
def __post_init__(self):
|
|
# unser erstes Element
|
|
self.__head: Optional[Node[T]] = None
|
|
# Die Länge der Liste
|
|
self.__length = 0
|
|
|
|
def __eq__(self, other: 'LinkedList[T]') -> bool:
|
|
"""Hier wollen wir alle Elemente von dieser Liste mit allen Elementen von einer anderen Liste vergleichen.
|
|
Hierbei kann man von ausgehen dass T vergleichbar ist.
|
|
Das Programm sollte nicht abstürzen bei unterschiedlichen längen etc. sondern einfach False zurückgeben"""
|
|
pass
|
|
|
|
def __iter__(self) -> Iterator[T]:
|
|
"""Hier wollen wir einen Iterator über alle Elemente haben, der Iterator kann leer sein
|
|
Tipp: Generator"""
|
|
pass
|
|
|
|
def append(self, value: T) -> None:
|
|
"""Hier wollen wir einfach `value` an das Ende der Liste setzen und die Länge erhöhen"""
|
|
pass
|
|
|
|
def remove(self, value: T):
|
|
"""Hier wollen wir den Wert `value` aus unserer Liste entfernen, wir können davon ausgehen dass T vergleichbar ist.
|
|
Wenn wir `value` nicht finden soll einfach nichts passieren"""
|
|
pass
|
|
|
|
def __len__(self) -> int:
|
|
"""Hier soll die Länge der Liste zurückgegeben werden"""
|
|
pass
|
|
|
|
def __getitem__(self, index: int) -> T:
|
|
"""_summary_
|
|
|
|
__getitem__ definiert das verhalten vom [] index operator wobei `index` der Wert ist der in [] übergeben wird
|
|
|
|
Hierbei sollen wir das Item `T` an Stelle `index` zurückgeben und sonst einen IndexError raisen
|
|
|
|
Args:
|
|
index (int): der Index von dem Item was wir suchen
|
|
|
|
Returns:
|
|
T: das Item an stelle `index`
|
|
"""
|
|
pass |