From e58b5723d10a431753f82314f92cbbf438595f63 Mon Sep 17 00:00:00 2001 From: "Finn.Bestmann" Date: Fri, 2 Oct 2026 07:05:58 +0000 Subject: [PATCH] Dateien nach "Verkettete Liste" hochladen --- Verkettete Liste/listen.py | 111 +++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 Verkettete Liste/listen.py diff --git a/Verkettete Liste/listen.py b/Verkettete Liste/listen.py new file mode 100644 index 0000000..1397647 --- /dev/null +++ b/Verkettete Liste/listen.py @@ -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