Kennt jemand einen Algorithmus, mit dem man herausfinden kann, ob eine verknüpfte Liste eine Schleife über sich selbst macht, indem man nur zwei Variablen verwendet, um die Liste zu durchlaufen. Angenommen, man hat eine verknüpfte Liste von Objekten, wobei es keine Rolle spielt, um welche Art von Objekt es sich handelt. Ich habe einen Zeiger auf den Kopf der verknüpften Liste in einer Variablen und ich habe nur eine andere Variable, mit der ich die Liste durchlaufen kann.
Mein Plan ist also, Zeigerwerte zu vergleichen, um zu sehen, ob irgendwelche Zeiger gleich sind. Die Liste ist von endlicher Größe, kann aber riesig sein. Ich kann beide Variablen auf den Kopf setzen und dann die Liste mit der anderen Variable durchlaufen, wobei ich immer prüfe, ob sie gleich der anderen Variable ist, aber wenn ich auf eine Schleife stoße, komme ich nicht mehr heraus. Ich denke, es hat mit den unterschiedlichen Geschwindigkeiten beim Durchlaufen der Liste und dem Vergleich der Zeigerwerte zu tun. Hat jemand eine Idee?
0 Stimmen
Danke, die Schildkröte und das Kaninchen bieten eine gute Lösung. Mir gefällt auch die Idee, dass ein Rabbit um die Turtle herumläuft, falls die Liste jemals auf sich selbst zurückfällt. BTW die Liste ist nicht zu erwarten, dass eine zirkuläre verknüpfte Liste sein, wenn es Schleifen, wird es wahrscheinlich auf irgendwo in der Mitte zeigen.