Geistiger Hohlraum: C++ Verkettete Liste sortieren (sehr knifflig)

Beitrag lesen

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.