Dein Problem sind deine repeat Schleifen. Der Schleifeninhalt wird einmal ausgeführt, auch wenn die Bedingung nicht erfüllt ist. Du überspringst hier einfach das gesuchte Element:
Delphi-Quelltext
1: 2: 3:
| repeat hilfe:=hilfe^.richtung; until hilfe^.richtung=lauf^.richtung; |
Denn in Hilfe steht da ja Start, also Katze --> Hund --> Haus. Dann kommt das "hilfe:=hilfe^.richtung", jetzt ist da drin Hund --> Haus, lauf^.richtung wäre aber Hund, das ist aber jetzt das aktuelle Element und kann nicht mehr gefunden werden.
Das ist ein Debugscreenshot genau an der Stelle, links siehst du die aktuellen Werte (im Anhang liegt das selbe Bild):
Das gesuchte lauf^.richtung ist dort markiert, dadrunter siehst du den Inhalt von hilfe. In dem Moment, in dem du an der Zeile ankommt, wäre in richtung das gesuchte Element. Nach der Zeile ist aber hilfe selbst das gesuchte Element.
// EDIT:
Ach ja:
Überleg mal was passiert, wenn gar keine zweite Zeile existiert an dieser Stelle (zur Erinnerung: a ist 1):
Delphi-Quelltext
1: 2: 3:
| repeat new(lauf); lauf^.inhalt:=memo2.lines[a]; |
Das ist das selbe Problem.