Hups, ich habe deinen Code wohl nicht aufmerksam genug gelesen. Also, erstmal einrücken:
Der Fehler tritt also gar nicht im oberen Teil auf, sondern in der einzelnen
while-Schleife, in der du schlicht und einfach den ersten Knoten auswählst. Vorneweg, wenn ich das so richtig verstanden habe: Warum merkst du dir den nicht einfach zu Beginn?
Da der Fehler im zweiten Durchlauf der
while-Schleife auftritt, ist voher folgendes passiert:
- Knoten := Knoten^.Previous
- Aufgrund der ersten Bedingungsabfrage wissen wir, dass jetzt gilt: Knoten != nil.
- Allerdings ist nicht gesichert, ob Knoten^ != nil ist. Aufgrund der Exception ist also anzunehmen, dass irgend ein Element dieser Liste zwar Previous gesetzt hat, aber Previous^ nicht gesetzt ist.
Umgekehrter Ansatz: Im vorletzten Durchlauf der
for-Schleife haben wir am Ende ein neues, leeres
test2. Im letzten Durchlauf weisen wir dieses nun einem
knoten^.Previous zu. Dadurch ergibt sich, dass
knoten^.Previous^ nil ist. Also genau das, was wir oben festgestellt haben.
Hoffe, ich hab den Code jetzt richtig gelesen.
Edit: Dein Ansatz ist aber insgesamt ziemlich seltsam. Beispielsweise weist du die Eigenschaft
Previous zu, bevor du den Konstruktur aufrufst: Die Zuweisung in Zeile 15 bezieht sich ja schon auf das Objekt, das sich vorher hinter
test verborgen hatte, und noch gar nicht initialisiert war.
Edit2: Ist das hier vielleicht so in etwa, was du suchst?