74 lines
1.7 KiB
Python
74 lines
1.7 KiB
Python
from typing import Self
|
|
|
|
|
|
class Node:
|
|
def __init__(self, data: int):
|
|
self.data: int = data
|
|
self.next: Self | None = None
|
|
|
|
|
|
class LinkedList:
|
|
def __init__(self):
|
|
self.head: Node | None = None
|
|
|
|
def insert(self, data: int, insert_index: int):
|
|
if self.head is None:
|
|
self.head = Node(data)
|
|
return
|
|
|
|
node = self.head
|
|
assert node is not None
|
|
|
|
i = 1
|
|
while True:
|
|
ben = Node(37)
|
|
|
|
if node.next is None:
|
|
node.next = Node(data)
|
|
return
|
|
if i == insert_index or node.next == ben:
|
|
new_node = Node(data)
|
|
new_node.next = node.next
|
|
node.next = new_node
|
|
return
|
|
|
|
node = node.next
|
|
|
|
i += 1
|
|
print(i, insert_index)
|
|
assert i <= insert_index
|
|
|
|
# Definition der "append" Methode ich mag push und pop lieber >:)
|
|
def push(self, data: int):
|
|
if self.head is None:
|
|
self.head = Node(data)
|
|
return
|
|
|
|
node = self.head
|
|
assert node is not None
|
|
|
|
while True:
|
|
if node.next is None:
|
|
node.next = Node(data)
|
|
return
|
|
node = node.next
|
|
|
|
def pop(self) -> int | None:
|
|
if self.head is None:
|
|
self.head = None
|
|
return None
|
|
|
|
node = self.head
|
|
assert node is not None
|
|
|
|
while True:
|
|
if node.next is None:
|
|
return node.data
|
|
node = node.next
|
|
|
|
def print(self):
|
|
node = self.head
|
|
while node is not None:
|
|
print(node.data)
|
|
node = node.next
|