サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
猫
hidekazu.hatenablog.jp
任意の連結リストの中にループがあるかどうか。あればループが開始するノードを見つけよ。 ってときフロイドの循環検出アルゴリズムを使う。(ウサギとカメのアルゴリズム) 1度に1動く低速のポインタと1度に2動く高速のポインタでリストを横断させる。 もしもリストの中にループがあれば、ループの中で高速のポインタが低速のポインタに追いつく。 ループがなければ高速のポインタはリストの最後まで横断することができる。(nextがNULLのノードにたどり着く) ここまではすんなりと理解できた。理解に時間がかかったのはこの後のループが開始するノードを見つけるとき。 ループの中で高速のポインタが低速のポインタに追いついたら、どちらかのポインタをリストの先頭に移動させる。 ここでは高速のポインタを移動させる。 その後両方のポインタを1ずつ動かして、両者の出会う位置がループの開始ノードである。 どうして先頭に戻して1
このページを最初にブックマークしてみませんか?
『hidekazu.hatenablog.jp』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く