Effiziente Implementierung von unveränderlicher (doppelter) LinkedList

Diese Frage gelesen zu habenUnveränderlich oder nicht unveränderlich? Wenn ich Antworten auf meine vorherigen Fragen zur Unveränderlichkeit lese, bin ich immer noch ein bisschen verwirrt über die effiziente Implementierung von einfachem LinkedList, das unveränderlich ist. In Bezug auf das Array scheint dies einfach zu sein - kopieren Sie das Array und geben Sie eine neue Struktur basierend auf dieser Kopie zurück.

Angeblich haben wir eine allgemeine Klasse von Knoten:

<code>class Node{
    private Object value;
    private Node next;
}
</code>

Und die Klasse LinkedList basiert auf dem oben Gesagten und ermöglicht dem Benutzer das Hinzufügen, Entfernen usw. Wie können wir nun die Unveränderlichkeit sicherstellen? Sollten wir alle Referenzen auf die Liste rekursiv kopieren, wenn wir ein Element einfügen?

Ich bin auch neugierig auf Antworten inUnveränderlich oder nicht unveränderlich? Diese erwähnen die Optimierung von Cerain, die dazu führt, (n) Zeit und Raum mit Hilfe eines Binärbaums zu protokollieren. Außerdem habe ich irgendwo gelesen, dass das Hinzufügen eines Elements zur Vorderseite ebenfalls 0 (1) ist. Dies verwirrt mich sehr, als ob wir nicht die Kopie der Referenzen zur Verfügung stellen würden. In Wirklichkeit modifizieren wir die gleichen Datenstrukturen in zwei verschiedenen Quellen, was die Unveränderlichkeit bricht ...

Würde eine Ihrer Antworten auch auf doppelt verknüpften Listen funktionieren? Ich freue mich auf Antworten / Hinweise auf andere Fragen / Lösungen. Vielen Dank im Voraus für Ihre Hilfe.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage