Gemäß dem Wikipedia-Artikel über verknüpfte Listen wird das Einfügen in die Mitte einer verknüpften Liste als O (1) betrachtet. Ich würde denken, es wäre O (n). Müssen Sie nicht den Knoten suchen, der sich am Ende der Liste befinden könnte?
Berücksichtigt diese Analyse nicht das Auffinden der Knotenoperation (obwohl dies erforderlich ist) und nur das Einfügen selbst?
EDIT :
Verknüpfte Listen haben gegenüber Arrays mehrere Vorteile. Das Einfügen eines Elements an einem bestimmten Punkt einer Liste ist eine Operation mit konstanter Zeit, während das Einfügen in ein Array möglicherweise das Verschieben der Hälfte der Elemente oder mehr erfordert.
Die obige Aussage ist für mich etwas irreführend. Korrigieren Sie mich, wenn ich falsch liege, aber ich denke, die Schlussfolgerung sollte lauten:
Arrays:
- Finden des Einfüge- / Löschpunktes O (1)
- Einfügen / Löschen durchführen O (n)
Verknüpfte Listen:
- Finden des Einfüge- / Löschpunktes O (n)
- Einfügen / Löschen durchführen O (1)
Ich denke, das einzige Mal, dass Sie die Position nicht finden müssten, wäre, wenn Sie eine Art Zeiger darauf behalten würden (wie in einigen Fällen mit Kopf und Schwanz). Wir können also nicht einfach sagen, dass verknüpfte Listen immer Arrays für Einfüge- / Löschoptionen schlagen.