Richtig, was anderes macht Deine append-Methode ja auch nicht.
Dann könnte ich ja mithilfe einer While - Schleife die Stelle herausfinden, in der der neue Wert eingefügt werden muss.
Richtig, was anderes macht Deine append-Methode ja auch nicht.
public void append(SortedList l) {
if (!l.isNil())
if (first == null) {
first = l.first;
} else {
Node neu;
for (neu = l.first; neu.next != null; neu = neu.next) {
for (Node alt = first; alt.next != null; alt = alt.next) {
if (neu.value < alt.value) {
neu.next = alt.next;
alt.next = neu;
}
}
}
}
}
Ich habe schon einiges versucht zu verändern finde den Fehler allerdings dennoch nicht.
Ich habe es zumindest versucht nur scheine ich ein klares Verständnis Problem zu haben.Hast Du das denn mal durchgespielt auf einem Zettel?
Der neue Node mit der 4 zeigt dann auf den ersten Node der existierenden Liste. Aber first verweist doch noch auf das ehemals erste Element aber nicht auf das neue Erste Element!
Also überleg Dir, wie Du first umsetzen kannst, so dies notwendig sein sollte....
toInsert.next = current.next;
current.next = toInsert;
Könntest Du. Statt immer wieder den gleichen Code zu schreiben, könntest Du aber auch eine bereits existierende Methode verwendenDann könnte ich ja mithilfe einer While - Schleife die Stelle herausfinden, in der der neue Wert eingefügt werden muss.
Ja, wenn die 9 kleiner als die 5 wäre, dann wäre das ja auch richtigWenn also die 9 kleiner ist als die 5 [...] würde das dann nicht quasi bedeuten das die 5 nach der 9 kommt ?
Ich hab mir auch schon gedacht die cons - Methode zu verwenden, weil die ja ungefähr das machtKönntest Du. Statt immer wieder den gleichen Code zu schreiben, könntest Du aber auch eine bereits existierende Methode verwenden![]()
Ja, die cons-Methode fügt Dir das Element sogar an der richtigen Stelle ein...Ich hab mir auch schon gedacht die cons - Methode zu verwenden, weil die ja ungefähr das macht
Okay das Prinzip habe ich verstanden also müsste ich nur die Mehtode cons aufrufen und die würde die Zahlen sortiert einfügenJa, die cons-Methode fügt Dir das Element sogar an der richtigen Stelle ein...
Eine Frage hätte ich noch. Und zwar gibt es eine Möglichkeit die cons - Methode aufzurufen und diese dann in append zu erweitern, das die alle Elemente hinzufügt und nicht nur eine?Ja, wobei cons halt immer nur eine Zahl einfügt (sonst wäre es ja genau das gleiche wie append)
Das ist Sinn und Zweck der Sache. Konkret: für jedes Element der übergebenen Liste cons aufrufen.Und zwar gibt es eine Möglichkeit die cons - Methode aufzurufen und diese dann in append zu erweitern, das die alle Elemente hinzufügt und nicht nur eine?
Das ist Sinn und Zweck der Sache. Konkret: für jedes Element der übergebenen Liste cons aufrufen.
Node i = cons();
Ich verstehe nicht wieso first noch auf das ehemals erste Element zeigt. Ich habe es mir auch aufgezeichnet bzw zumindest versucht.Hast Du das denn mal durchgespielt auf einem Zettel?
Der neue Node mit der 4 zeigt dann auf den ersten Node der existierenden Liste. Aber first verweist doch noch auf das ehemals erste Element aber nicht auf das neue Erste Element!
Also überleg Dir, wie Du first umsetzen kannst, so dies notwendig sein sollte....
Node current = first;
while (current.next != null && current.next.value < n) {
current = current.next;
}
toInsert.next = current.next;
current.next = toInsert;
}
Die Methode cons() existiert nicht.Prinizpiell müsste das doch dann mit
Die Methode cons() existiert nicht.
Koblenz@Luca H wo studierst du denn? - Sowas ist Grundvoraussetzung.
Das Problem ist einfach das er nicht mal erklärt hat wie man eine ADT List implementiertNaja, der Übungsleiter muss ja wohl nicht extra dazu sagen, dass nur genutzt werden kann, was auch definiert ist. Eine Methode cons() ohne Parameter gibt es nicht.
Die alte Liste sei 5->6->null und die neue Liste 1->2->nullIch verstehe nicht wo genau der Unterschied zwischen dem Versuch und diesen Zeilen genau ist.
Gut danke das macht es mir ersichtlich, aber wieso verhält es sich dann nicht genauso bei dem Code ?Jetzt prüfst Du, ob neu.value < alt.value gilt, was offensichtlich der Fall ist, denn 1 < 5. Also führst Du aus:
neu.next = alt.next, d. h. neu=1->6 und
alt.next = neu, d. h. alt=5->1
Durch die Änderung der next-Zeiger ergibt sich also:
1. für die alte Liste 5->1->6-null
2. für die neue Liste 1->6->null
Mal abgesehen davon, dass die 2 nun ganz verloren ist, stimmt die Reihenfolge in der alten Liste auch nicht.
Node current = first;
while (current.next != null && current.next.value < n) {
current = current.next;
}
toInsert.next = current.next;
current.next = toInsert;
Das können wir hier schlecht beurteilen, ich bin aber schon verwundert, dass hier gleich mehrere Leute sind, die ernsthafte Probleme haben.Das Problem ist einfach das er nicht mal erklärt hat wie man eine ADT List implementiert
public void append(SortedList l) {
cons(5);
cons(2);
cons(9);
}
1. Ist das der Code für cons und nicht für append.aber wieso verhält es sich dann nicht genauso bei dem Code ?
first ist nur der Zeiger auf den ersten Knoten der Liste.Ist first selbst ein Element der Liste oder ist es nur der erste Zeiger auf den nächsten Knoten?
Ich habe mal versucht es mithilfe des Methoden Aufrufs von cons zu regeln.Das können wir hier schlecht beurteilen, ich bin aber schon verwundert, dass hier gleich mehrere Leute sind, die ernsthafte Probleme haben.
Schau doch mal Deine cons-Methode an, die erwartet einen Parameter, nämlich den einzufügenden Wert.
Wenn Du also eine Methode schreibst:
Dann fügt diese Methode die Werte 5, 2 und 9 zur aktuellen Liste hinzu.Java:public void append(SortedList l) { cons(5); cons(2); cons(9); }
Statt der fixen Werte willst Du cons nun für alle Elemente aus l aufrufen, also musst Du über l iterieren. Dafür gibt es verschiedene Möglichkeiten, in jedem Fall brauchst Du eine Schleife.
public void append(SortedList l) {
if (!l.isNil())
if (first == null) {
first = l.first;
} else {
for (Node neu = l.first; neu.next != null; neu = neu.next) {
this.cons(neu.value);
}
}
}
Klar. Damals ging es um 2D-Arrays, wenn ich mich recht entsinne und schon da fehlten alle Grundlagen. Darum #99ist das jetzt lediglich die Gruppe, die vor paar Wochen hier schon aktiv war?
Das ist nicht seltsam, sondern liegt an Deiner Schleifenbedingung.Dies funktioniert seltsamerweise jedoch nur für 2 von 3 Werten.
Ich nehme mal an du meinst da die Schleife nur solange durchläuft bis neu.next != null ist.Das ist nicht seltsam, sondern liegt an Deiner Schleifenbedingung.
Die Bedingung habe ich für den Fall eingesetzt, dass die erste Liste null sei, sodass quasi die neue Liste diese einfach ersetzen kann. Ob es wirklich getestet wird kann ich nicht einsehen, da nur ein kleiner Teil des Tests einsehbar ist.Und brauchst die Sonderbehandlung mit der Prüfung, ob First Null ist?
Leute, Leute... bevor Ihr Euch an irgendwelche Optimierungen wagt, solltet ihr halbwegs wissen, was ihr da betreibt. Bei Euch fehlt wirklich alles an Grundlagen, was ich mir vorstellen kann. Dozent hin oder her: IHR müsst Euch darum kümmern, die Zeiten, in denen der Lehrer dem Schüler alles nachträgt sind für Euch vorbei.Die Bedingung habe ich für den Fall eingesetzt, dass die erste Liste null sei, sodass quasi die neue Liste diese einfach ersetzen kann.