wenn zB 6 und 8 bereits exisitiert, wird 2 zwischen 6 und 8 eingehängt und nicht vor 6.
aktuell = kopfzeiger;
marker_schueler = kopfzeiger;
if (aktuell != NULL) {
while (aktuell != NULL) {
aktuelle_katalognr = aktuell->katalognummer;
if (aktuelle_katalognr < katnr) {
marker_schueler = aktuell;
}
aktuell = aktuell->next;
}
neuer_schueler->next = marker_schueler->next;
marker_schueler->next = neuer_schueler;
Wie kannst Du etwas vor dem ersten Objekt (im Beispiel: 6) eintragen, wenn Du immer nur nach einem Objekt einfügst (letzte Zeile, 6->next = 2)?
Davon unabhängig ist es Zeitverschwendung, die while-Schleife immer bis zum Ende der Liste durchzulaufen anstatt sie beim ersten Treffer zu beenden.
if (kopfzeiger == NULL) { // Liste ist noch leer
kopfzeiger = neuer_schueler;
}
else {
letzter = NULL; // Vorgänger von aktuell
aktuell = kopfzeiger;
while ((aktuell != NULL) && (aktuell->katalognummer < neuer_schueler->katalognummer)) {
letzter = aktuell;
aktuell = aktuell->next;
}
// Aktuell zeigt jetzt auf das erste Element, das gleich oder größer als neuer_schueler ist, oder ist NULL, falls am Ende der Liste. neuer_schueler muss vor diesem Element eingehängt werden.
neuer_schueler->next = aktuell;
if (letzter != NULL) { // neuer_schueler wird nicht erster Eintrag
letzter->next = neuer_schueler;
}
else { // kein Vorgänger, neuer_schueler wird erster Eintrag
kopfzeiger = neuer_schueler;
}
}
So ungefähr. Ich persönlich stehe ja auf doppelt verkettete Listen, die sind etwas praktischer.