so,
jetzt hab ich 's:
Bei einer einfach verküpften Liste müssen 3! Zeiger verändert werden, du brauchst also zwei Hilfsvariablen.
Delphi-Quellcode:
var
changed: boolean;
nav, help1, help2: tListenElement;
begin
changed := true;
while changed do // deine Version mit der zweiten Schleife sollte auch funktionieren,
begin // aber so muss du die Anzahl der Elemente der Liste nicht kennen.
changed := false;
nav := root; // Zeiger auf den Anfang setzen
while not (nav^.next = nil) do // solange wir nicht am Ende sind weiter machen
begin
If nav^.name > nav^.next^.name then // vergleichen
begin
help1 := nav; // die zwei Elemente vertauschen.
nav := nav^.next; // man beachte, dass hierzu drei Zeiger geändert werden müssen!
help2 := nav^.next;
nav^.next := ´nav^.next^.next;
help2^.next := help1;
changed := true;
If help1=root then root := nav; // falls wir gerade das root-Element geändert haben, root neu setzen
end;
nav := nav^.next; // auf zum nächsten Element :)
end;
end;
end;