Hallo Freunde,
bin neu hier - und habe ein kleines Problemchen beim sortierten Einfügen mit linearen Listen.
Es liegt bspw. folgende Quellliste vor, die sortiert eingelesen werden soll:
Beim Einlesen prüft er nach Schlüssel (ob schon vorhanden) und an welcher Stelle er einfügen soll (Sortierung nach Schlüssel).
Ergebnis soll wie folgt aussehen:
Ergebnis sieht aber nach 1. Sortierung folgendermaßen aus:
Nach 2. Sortierung:
Nach 3. Sortierung wieder wie bei 1. Sortierung, usw.
Selbst eine Methode, die das letzte Element nach dem Kopfelement (head, also 1. Element) einfügen soll, funktioniert nicht. Ich weiß echt keinen Rat mehr.
Hier mal der Einfüge-Code, an dem es hängt (sonst funktioniert eigentlich alles)
Aufruf mit insert(lev);
lev = der Datentyp mit int key und String titel (Getter & Setter vorhanden):
Hier noch der Code, womit ich das nachträglich reparieren wollte (funktioniert nicht, Aufruf mit trick17(head); ):
Danke und Gruß!
bin neu hier - und habe ein kleines Problemchen beim sortierten Einfügen mit linearen Listen.
Es liegt bspw. folgende Quellliste vor, die sortiert eingelesen werden soll:
3; susanne
5; bernd
1; hermann
4; klaus
2; fritz
Beim Einlesen prüft er nach Schlüssel (ob schon vorhanden) und an welcher Stelle er einfügen soll (Sortierung nach Schlüssel).
Ergebnis soll wie folgt aussehen:
1; hermann
2; fritz
3; susanne
4; klaus
5; bernd
Ergebnis sieht aber nach 1. Sortierung folgendermaßen aus:
1; hermann
3; susanne
4; klaus
5; bernd
2; fritz
Nach 2. Sortierung:
1; hermann
2; fritz
4; klaus
5; bernd
3; susanne
Nach 3. Sortierung wieder wie bei 1. Sortierung, usw.
Selbst eine Methode, die das letzte Element nach dem Kopfelement (head, also 1. Element) einfügen soll, funktioniert nicht. Ich weiß echt keinen Rat mehr.
Hier mal der Einfüge-Code, an dem es hängt (sonst funktioniert eigentlich alles)
Aufruf mit insert(lev);
lev = der Datentyp mit int key und String titel (Getter & Setter vorhanden):
Java:
public void insert(LV lev) {
ListEntry e = new ListEntry(lev);
if (e == null) {
return;
}
if (head == null) {
head = e;
}
else if (head.getLV().getKey()==e.getLV().getKey()) {
System.out.println("Schlüssel existiert bereits.");
System.out.println(" => Einfügen fehlgeschlagen!");
return;
}
else if (head.getLV().getKey()>e.getLV().getKey()) {
e.setNext(head);
head = e;
}
else
insertRec(head, e);
}
public void insertRec(ListEntry head, ListEntry e) {
ListEntry b = head.getNext();
if (b == null) {
head.setNext(e);
}
else if (b.getLV().getKey()==e.getLV().getKey()) {
System.out.println("Schlüssel existiert bereits.");
System.out.println(" => Einfügen fehlgeschlagen!");
}
else if (b.getLV().getKey()<e.getLV().getKey() && b.getNext()!=null) {
insertRec(head.getNext(), e);
}
else {
e.setNext(b);
head.setNext(e);
}
}
Hier noch der Code, womit ich das nachträglich reparieren wollte (funktioniert nicht, Aufruf mit trick17(head); ):
Java:
public void trick17(ListEntry e) {
if (e==null || head.getNext().getNext()==e || head.getNext()==null || head.getNext().getNext()==null) {
return;
}
else if (e.getNext()==null) {
e.setNext(head.getNext().getNext());
head.getNext().setNext(e);
}
else
trick17(e.getNext());
}
Danke und Gruß!
Zuletzt bearbeitet von einem Moderator: