Eine verkettete Liste, auch Linked List genannt, ist eine fundamentale Datenstruktur in der Softwareentwicklung. Ihre besondere Stärke liegt in der effizienten Verwaltung einer Sequenz von Datenelementen, die dynamisch manipuliert wird. Anders als bei einem Array, bei dem die Elemente in einem kontinuierlichen Speicherblock liegen, sind die Elemente einer verketteten Liste über Verweise (oder "Links") miteinander verbunden.
Jedes Element einer verketteten Liste, oft auch als Knoten (Node) bezeichnet, enthält in der Regel zwei Komponenten: zum einen die Daten, die gespeichert werden sollen, und zum anderen einen Verweis auf das nachfolgende Element der Liste. Das erste Element wird als Kopf (Head) der Liste bezeichnet, das letzte Element weist meist auf einen Nullwert (NULL oder nil) hin und markiert damit das Ende der Liste.
Der Hauptvorteil der verketteten Liste liegt in ihrer Flexibilität beim Einfügen und Löschen von Elementen. Während in einem Array der Speicher verschoben oder neu alloziert werden muss, um Elemente hinzuzufügen oder zu entfernen, ist bei einer verketteten Liste lediglich das Aktualisieren der Verweise nötig, um ein Element einzufügen oder zu löschen. Dieser Prozess ist besonders effizient, da er unabhängig von der Größe der Liste ist, solange der Zugriff auf die entsprechenden Knoten direkt erfolgt.
Es gibt verschiedene Arten von verketteten Listen, die zusätzliche Eigenschaften oder Funktionalitäten bieten:
Trotz der effizienten Einfügungs- und Löschoperationen haben verkettete Listen Nachteile beim direkten Zugriff (Direct Access) oder der Suche nach Elementen. Da jedes Element nur einen Verweis auf das nächste enthält, muss die Liste vom Kopf an durchlaufen werden, um ein spezifisches Element zu erreichen. Das bedeutet, dass der Zugriff auf ein Element eine Zeitkomplexität von O(n) hat, wo n die Anzahl der Elemente in der Liste ist.
Beispielsweise in der Softwareentwicklung, besonders bei Anwendungen, in denen dynamische Datenstrukturanpassungen häufig erforderlich sind, sind verkettete Listen ein unverzichtbares Werkzeug. Sie finden auch Einsatz in der Implementierung vieler anderer komplexerer Datenstrukturen wie Stacks, Queues und sogar einiger Versionen von Hash-Tabellen. Insgesamt ist die verkettete Liste ein Robustes Konstrukt, das in vielen Algorithmen und Anwendungen entscheidende Vorteile bietet.