Grundlegende Listenoperationen Zeitkomplexität
Die folgende Tabelle zeigt die Zeitkomplexität grundlegender Operationen für verkettete Listen.
Suchoperation
Das Suchen in einer verketteten Liste beinhaltet das Durchlaufen der Liste vom Anfang bis das gewünschte Element gefunden wird. Diese Operation hat eine Zeitkomplexität von O(n)
sowohl im schlimmsten als auch im durchschnittlichen Fall. Im Gegensatz zu Arrays unterstützen verkettete Listen keinen direkten Zugriff auf Elemente basierend auf ihrem Index, was zu einer linearen Zeitkomplexität beim Suchen führt.
pythondef search_linked_list(head, target):current = headwhile current:if current.val == target:return Truecurrent = current.nextreturn False
Einfügeoperation
Das Einfügen eines Elements in eine verkettete Liste kann effizient durchgeführt werden, indem nur wenige Zeiger aktualisiert werden. Insbesondere müssen wir den Zeiger des Elements aktualisieren, nach dem wir das neue Element einfügen, damit es auf das neue Element zeigt, und der Zeiger des neuen Elements muss auf das nächste Element in der Liste zeigen. Diese Operation hat eine Zeitkomplexität von O(1)
.
pythondef insert_node(head, val, position):if position == 0:new_node = ListNode(val)new_node.next = headreturn new_nodecurrent = headfor _ in range(position - 1):if current is None:raise ValueError("Position out of range")current = current.nextnew_node = ListNode(val)new_node.next = current.nextcurrent.next = new_nodereturn head
Löschoperation
Genau wie bei der Einfügeoperation müssen wir die Zeiger der benachbarten Knoten aktualisieren, um den gelöschten Knoten zu umgehen. Dadurch haben wir eine Zeitkomplexität von O(1)
für die Löschoperation.
pythondef delete_node(head, target):# If the list is empty, return Noneif not head:return None# If the target is at the head, move the head to the next nodeif head.val == target:return head.next# Search for the target value while keeping track of the previous nodeprev = headcurrent = head.nextwhile current:if current.val == target:prev.next = current.nextreturn headprev = currentcurrent = current.nextreturn head
Hinweis
Beim Einfügen oder Löschen eines Elements in einer verketteten Liste muss der Prozess entsprechend die Zeiger anpassen. Im Gegensatz dazu muss bei Arrays ein Segment des Arrays umgeschrieben werden, um die gleiche Operation zu erreichen.
Danke für Ihr Feedback!