Dateien nach "Verkettete Liste" hochladen

This commit is contained in:
2026-10-02 07:05:58 +00:00
parent 59ff33541a
commit e58b5723d1
+111
View File
@@ -0,0 +1,111 @@
from knoten import Knoten # Importiert die Klasse Knoten aus der Datei knoten.py
class Liste: # Erstellt die Klasse Liste
def __init__(self): # Wird beim Erstellen einer neuen Liste automatisch ausgeführt
self.head = None
# head zeigt auf den ersten Knoten; None bedeutet, dass die Liste leer ist
def append(self, daten): # Fügt einen neuen Knoten am Ende der Liste ein
neuer_Knoten = Knoten(daten) # Erstellt einen neuen Knoten mit dem Wert daten
if self.head is None: # Prüft, ob die Liste leer ist
self.head = neuer_Knoten # Der neue Knoten wird zum ersten Knoten
else: # Wird ausgeführt, wenn die Liste nicht leer ist
letzter_Knoten = self.head # Startet beim ersten Knoten
while letzter_Knoten.nachfolger is not None: # Geht weiter, solange es einen nächsten Knoten gibt
letzter_Knoten = letzter_Knoten.nachfolger # Geht zum nächsten Knoten
letzter_Knoten.nachfolger = neuer_Knoten # Hängt den neuen Knoten am Ende an
def ausgebenListe(self): # Gibt alle Werte der Liste aus
aktueller_knoten = self.head # Startet beim ersten Knoten
while aktueller_knoten is not None: # Wiederholt sich, solange ein Knoten vorhanden ist
print(aktueller_knoten.daten) # Gibt die Daten des aktuellen Knotens aus
aktueller_knoten = aktueller_knoten.nachfolger # Geht zum nächsten Knoten
def einfuegen_bei(self, index, daten): # Fügt einen neuen Knoten an einer bestimmten Position ein
neuer_Knoten = Knoten(daten) # Erstellt einen neuen Knoten mit den angegebenen Daten
if index == 0: # Prüft, ob der Knoten an der ersten Stelle eingefügt werden soll
neuer_Knoten.nachfolger = self.head # Der neue Knoten zeigt auf den bisherigen ersten Knoten
self.head = neuer_Knoten # Der neue Knoten wird zum ersten Knoten
return # Beendet die Methode
aktueller_knoten = self.head # Startet beim ersten Knoten
zaehler = 0 # Setzt den Zähler auf 0
while aktueller_knoten is not None and zaehler < index - 1: # Sucht den Knoten vor der gewünschten Position
aktueller_knoten = aktueller_knoten.nachfolger # Geht zum nächsten Knoten
zaehler += 1 # Erhöht den Zähler um 1
if aktueller_knoten is None: # Prüft, ob der gewünschte Index nicht existiert
print("index out of range") # Gibt eine Fehlermeldung aus
return # Beendet die Methode
neuer_Knoten.nachfolger = aktueller_knoten.nachfolger # Der neue Knoten zeigt auf den nächsten Knoten
aktueller_knoten.nachfolger = neuer_Knoten # Der vorherige Knoten zeigt jetzt auf den neuen Knoten
def loeschen(self, suchwert): # Sucht nach einem Wert und löscht das erste Vorkommen
aktueller_knoten = self.head # Startet beim ersten Knoten
vorheriger_knoten = None # Speichert den vorherigen Knoten
if aktueller_knoten is None: # Prüft, ob die Liste leer ist
print("Liste ist leer löschen nicht möglich") # Gibt eine Fehlermeldung aus
return # Beendet die Methode
if aktueller_knoten.daten == suchwert: # Prüft, ob der erste Knoten den gesuchten Wert enthält
self.head = aktueller_knoten.nachfolger # Der nächste Knoten wird zum ersten Knoten
return # Beendet die Methode
while aktueller_knoten is not None and aktueller_knoten.daten != suchwert: # Sucht nach dem Wert
vorheriger_knoten = aktueller_knoten # Speichert den aktuellen Knoten als vorherigen Knoten
aktueller_knoten = aktueller_knoten.nachfolger # Geht zum nächsten Knoten
if aktueller_knoten is None: # Prüft, ob der Wert nicht gefunden wurde
print(f"Wert {suchwert} wurde nicht gefunden") # Gibt eine Fehlermeldung aus
return # Beendet die Methode
vorheriger_knoten.nachfolger = aktueller_knoten.nachfolger # Überspringt den zu löschenden Knoten
def loeschen_anStelle(self, index): # Löscht einen Knoten anhand seiner Position
if self.head is None: # Prüft, ob die Liste leer ist
print("Liste ist leer") # Gibt eine Meldung aus
return # Beendet die Methode
if index == 0: # Prüft, ob der erste Knoten gelöscht werden soll
self.head = self.head.nachfolger # Der zweite Knoten wird zum ersten Knoten
return # Beendet die Methode
aktueller_knoten = self.head # Startet beim ersten Knoten
for i in range(index - 1): # Geht bis zum Knoten vor dem zu löschenden Knoten
if aktueller_knoten.nachfolger is None: # Prüft, ob kein weiterer Knoten vorhanden ist
print(f"Index {index} existiert nicht") # Gibt eine Fehlermeldung aus
return # Beendet die Methode
aktueller_knoten = aktueller_knoten.nachfolger # Geht zum nächsten Knoten
if aktueller_knoten.nachfolger is None: # Prüft, ob der gewünschte Knoten nicht existiert
print("Existiert nicht") # Gibt eine Fehlermeldung aus
return # Beendet die Methode
aktueller_knoten.nachfolger = aktueller_knoten.nachfolger.nachfolger # Überspringt den zu löschenden Knoten