List implementierung Java?


05.06.2023, 14:21

sdfs

1 Antwort

Vom Beitragsersteller als hilfreich ausgezeichnet

Dein Front-Zeiger zeigt auf A.
Du erstellst Element B mit Wert V. Der Next-Zeiger von B zeigt initial auf null.
Du setzt den Next-Zeiger auf das Element auf das gerade der Front-Zeiger zeigt (also auf A).
Dann lässt du den Front-Zeigter auf das neue Element zeigen (auf B).


EasternPremise 
Beitragsersteller
 05.06.2023, 14:22

ich hab das nochmal grafisch veranschauclicht, die frage ist jetzt, welchen data value hat dann jetzt front, wenn es vorher null war?

0
Destranix  05.06.2023, 14:26
@EasternPremise

Du setzt den Next-Pointer auf den alten Wert des Front-Pointers und setzt dann den Front-Pointer auf den neuen Knoten.

Front selbst hat keinen Daten-Wert, sondern ist nur eine Referenz auf ein anderes Element. Vor dem Einfügen auf A (oder null wenn die Liste leer ist), nach dem Einfügen auf das neue Element.

0
EasternPremise 
Beitragsersteller
 05.06.2023, 14:30
@Destranix

aber wir haben das so gemacht, dass wir front gleich dem neuen knoten setzen nach dem zeiger setzen, bzw. wenn front null ist, haben wir folgendes gemacht: if (front == null){

Node n = new Node(VAlue);

front = n;

front.next = null;

}

bzw. wenn man schon eine liste hat dann hat man wie du auch das erst umgezeigert also den zeiger des neu erstellten knotens auf front gesetzt und dann front = n; gemacht, damit man den neuen head kennt, und wenn ich eine liste erstelle und front.datavalue ausgebe kommt auch der erste wert raus

0
Destranix  05.06.2023, 14:33
@EasternPremise

Deine Frage verstehe ich nicht.

und wenn ich eine liste erstelle und front.datavalue ausgebe kommt auch der erste wert raus

Ja, im Prinzip ist in Java jese Objekt-Variable nur eine Referenz auf ein Objekt. Und die referenz kann auch leer sein (dann ist sie null).
Und mit dem Punkt-Operator dereferenziert man und ruft dann den Wert des referenzierten Objekts auf.

0
EasternPremise 
Beitragsersteller
 05.06.2023, 14:39
@Destranix

jo aber wenn ich eine liste erstelle List liste1 = new Liste(); liste1.addFront(2); und dann print(liste1.front.datavvalue oder value halt den wert) mache dann iwrd auch das richtige ausgeprinted, also hat front sozusagen datavalue

0
Destranix  05.06.2023, 14:41
@EasternPremise

Klar.

Was passiert:

List liste1 = new Liste();

Eine neue Liste wird erstellt. liste1.front ist null.

liste1.addFront(2);

Ein neues Element A wird erstellt. der Wert von A wird auf 2 gesetzt.
liste1.front wird auf A gesetzt (zeigt jetzt auf A).
front.next (entspricht A.next) wird auf null gesetzt. (Eigentlich unnötig, denn A.next ist bereits nach der Initialisierung null).

1
EasternPremise 
Beitragsersteller
 05.06.2023, 14:48
@Destranix

ah ok gut, so wenn ich dann jetzt noch mal liste1.addFront(3); aufrufe wird neuer knoten erstellen der zeigt auf front also auf ehemals A was es aber nicht mehr gibt , da die liste sich ja nur explizit den head merkt, dann setze ich front gleich dem neuen knoten sodass der verweis von front auf ehemals A verschwindet und jetzt bei dem neuen Knoten ist und dadurch erbt sozusgaen alle eigenschaften von dem neu erstellten knoten oder ?

und wenn man sich noch in der methode befindet zeigen dann sowohl der knoten als auch front auf die gleiche stelle oder? also gibt es dann sozuagen 2 verweise auf den knoten mit der 2

0
Destranix  05.06.2023, 14:54
@EasternPremise
und wenn man sich noch in der methode befindet zeigen dann sowohl der knoten als auch front auf die gleiche stelle oder? also gibt es dann sozuagen 2 verweise auf den knoten mit der 2

Ja.

wenn ich dann jetzt noch mal liste1.addFront(3); aufrufe wird neuer knoten erstellen der zeigt auf front also auf ehemals A

Der zeigt halt auf den Knoten auf den vorher front gezeigt hatte.

was es aber nicht mehr gibt , da die liste sich ja nur explizit den head merkt

Geben tut es das schon noch. Nur hast du halt von deiner liste keine direkte Referenz dahin sondern musst dich erst durch die Liste bis zu dem Element hangeln.

dann setze ich front gleich dem neuen knoten sodass der verweis von front auf ehemals A verschwindet und jetzt bei dem neuen Knoten ist

Ja.

und dadurch erbt sozusgaen alle eigenschaften von dem neu erstellten knoten oder

Also erben tut da gar nichts.
Aber ja, "front" zeigt dann auf das neu erstellte Element und hat damit dieselben Eigenschaften wie dieses.

1
EasternPremise 
Beitragsersteller
 05.06.2023, 15:05
@Destranix

Ja erben war halt so gemeint, juut danke meista , kriegst den Stern

1