2011-09-13 7 views
43

リンクリストにループがあり、ソリューション(Floydのサイクル検出アルゴリズム)が2つのポインタを持つことが1つの方法で、彼らが再び出会うかどうか確認してください。リンクされたリストループ検出アルゴリズム

私の質問は、1つのポインタを固定しておき、毎回他のポインタを1ステップずつ進めるのはなぜですか?

+7

誰かが好奇心が強い場合は、アルゴリズムの修正が幾分速くなります。http://www.siafoo.net/algorithm/11 – Dave

答えて

55

最初の(移動しない)ポインタがループ内にないため、ポインタが決して満たされない可能性があるためです。 (ループはリストの一部のみで構成されることに注意してください)

+1

これで解決します。ありがとう、私は1つの正解をマークすることができるので、私は最も早いものをマークします。 –

26

ループには、最初のポインタが指す要素が含まれていない可能性があるためです。

たとえば、最初のポインタが要素1を指し、リンクされたリストが後でループ(1-> 2-> 3-> 4-> 2)を持つ場合、アルゴリズムはそれを検出しません。

+0

ちょうどいくつかのマイナーなタイプミスが削除されたので、良い良心を持って週に50+を与えることができます(数秒で受け入れられなかったので)。 – DaveFar

+0

@DaveBall Wow。ありがとう。私はあなたが気づいてうれしいです。 ;) – quasiverse

82

完全なlinkedListがループ内にない可能性があります。限りカウボーイは何のループが検出されない、ここで最初のポインタがあるよう

enter image description here

:リンクリストについては

検出アルゴリズム投げ縄、次の2つのポインタを必要としています。しかし、それを段階的に前進させると、最終的にループに入ります。


BTWは、グラフ理論のテクニカスであり、カウボーイはそうではありません。

+33

+1カウボーイ。 – Heinzi

+2

yeeeeeeeehaw :) – DaveFar

+2

+1 @quasiverseとカウボーイの間のまともな姿勢 – Basic

関連する問題