Nachweis des Zyklusbeginns in verknüpfter Liste [duplizieren]

Diese Frage hat hier bereits eine Antwort:

Erläutern Sie, wie das Auffinden eines Zyklusstartknotens in einer Zyklusverknüpfungsliste funktioniert. 20 answers

Von mehreren Beiträgen innerhalb und außerhalb von stackoverflow habe ich gelernt, wie man Zyklen in einer verknüpften Liste erkennt, die Länge eines Zyklus. Ich habe auch die Methode gefunden, wie man den Beginn der Schleife erkennt.

ier sind die Schritte noch einmal als Referen

Erkennungsschleife:

Have zwei Zeiger, klassisch Hase und Schildkröte genannt. Bewegen Sie den Hasen um 2 Schritte und die Schildkröte um 1. Wenn sie sich irgendwann treffen, gibt es mit Sicherheit einen Zyklus, und der Treffpunkt liegt offensichtlich innerhalb des Zyklus.

Finden der Länge der Schleife:

Halten Sie einen Zeiger fest am Treffpunkt, während Sie den anderen inkrementieren, bis sie wieder gleich sind. Erhöhen Sie einen Zähler, während Sie fortfahren, und der Zählerwert bei meet ist die Länge des Zyklus.

Beginn des Zyklus finden

Nehmen Sie einen Zeiger an den Anfang der Liste und halten Sie den anderen am Treffpunkt. Jetzt inkrementiere beide um eins und der Treffpunkt ist der Beginn der Schleife. Ich habe die Methode in einigen Fällen auf Papier überprüft, verstehe aber nicht, warum sie funktionieren sollte.

Kann jemand einen mathematischen Beweis liefern, warum diese Methode funktioniert?

Antworten auf die Frage(12)

Ihre Antwort auf die Frage