Page 1 of 1

Deep Copy Constructor für verknüpfte Liste in Java

Posted: 02 Mar 2025, 14:09
by Anonymous
Ich habe eine HW -Zuordnung und nur ein kleiner Teil davon ist, einen Kopierkonstruktor zu erstellen, der eine tiefe Kopie der verlinkten Liste erstellt, die Sie in seine Parameter eingegeben haben. Mein Code gibt mir eine neue Liste, die genau der alte ist (die, die Sie als Parameter eingeben), und das ist was ich möchte, aber der alte wird geändert. < /P>

Hier ist der Konstruktor:

Code: Select all

public SortedLinkedSet(SortedLinkedSet copy) {
if (copy == null) {
this.firstNode = null;
} else{
SortedLinkedSetNode firstNode1 = new SortedLinkedSetNode(copy.getFirstNode().value);
this.firstNode = firstNode1;
// so basically I am chaining elements from "copy" to firstNode1 and then making "this" = to firstNode1.
while (copy.firstNode.next !=null) {
firstNode1.add(copy.getFirstNode().next.value);
this.firstNode = firstNode1;
copy.firstNode = copy.firstNode.next;
// at the end of this loop I have a successful new linkedList with the same value, but "copy" has been changed
}
}
}
Wenn ich beispielsweise eine verlinkte Liste eingehe, die die Werte (1,2,3) enthält - mit diesem Konstruktor erhalte ich eine neue verlinkte Liste mit Werten 1,2,3 Aber der alte hat nur 1. Wenn mir jemand helfen kann, warum dies falsch ist, wäre es großartig. Danke < /p>

Update: Wie Ireeder betonte, und mit einem Test, den ich durchgeführt habe, bin ich mir fast sicher, dass das Problem in der Anweisung vorliegt:
Copy.Firstnode = Copy.Firstnode.Next;SortedLinkedSetNode firstNode = new SortedLinkedSetNode(copy.getFirstNode().value);
this.firstNode=firstNode;

firstNode.add(copy.getFirstNode().next.value);
this.firstNode = firstNode;

firstNode.add(copy.getFirstNode().next.next.value);
this.firstNode = firstNode;
< /code>

Und das funktioniert perfekt (aber ich wusste im Voraus, dass ich mit nur 3 Elementliste teste). Wie würde ich es mit einer Weile Schleife tun, ohne eine solche Anweisung zu verwenden:
copy.firstnode = Copy.Firstnode.Next;>