[解決済み】リンクリストのループを検出する方法は?
2022-03-23 02:21:24
質問
Javaでリンクリスト構造を持っているとします。 これはNodeで構成されている。
class Node {
Node next;
// some user data
}
で、各Nodeは次のNodeを指します。ただし、最後のNodeはnextにnullを指定します。 つまり、最後のNodeはnullを持つ代わりに、その前に来たリスト内のいずれかのNodeへの参照を持つことになります。
の書き方はどうすればいいのでしょうか?
boolean hasLoop(Node first)
を返します。
true
は、与えられたノードがループを持つリストの先頭であれば
false
それ以外の場合は? どう書けば、一定の容量とそれなりの時間がかかるようになるのでしょうか?
ループを使ったリストがどのようなものか、写真で紹介します。
解決方法は?
を使用することができます。
Floydのサイクルファインディングアルゴリズム
としても知られています。
かめとうさぎアルゴリズム
.
リストへの参照を2つ用意し、それらを
異なる速度
. 一方を
1
ノードで、もう一方は
2
ノードがあります。
- リンクリストにループがある場合、それらは 意志 間違いなく を満たします。
-
どちらか一方が
2つのリファレンス(またはその
next
) になります。null
.
アルゴリズムを実装したJava関数です。
boolean hasLoop(Node first) {
if(first == null) // list does not exist..so no loop either
return false;
Node slow, fast; // create two references.
slow = fast = first; // make both refer to the start of the list
while(true) {
slow = slow.next; // 1 hop
if(fast.next != null)
fast = fast.next.next; // 2 hops
else
return false; // next node null => no loop
if(slow == null || fast == null) // if either hits null..no loop
return false;
if(slow == fast) // if the two ever meet...we must have a loop
return true;
}
}
関連
-
[解決済み] java.lang.IncompatibleClassChangeError: Mongo クラスを実装しています。
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] 山積みされた靴下を効率よく組み合わせるには?
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] Pythonのリストメソッドであるappendとextendの違いは何ですか?
-
[解決済み] Pythonの辞書からキーを削除するにはどうしたらいいですか?
-
[解決済み] 辞書のリストを辞書の値でソートするにはどうしたらいいですか?
-
[解決済み] Javaの「for each」ループはどのように機能するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] maven. -source 1.5ではラムダ式がサポートされていません。
-
[解決済み] Java の substring() の時間複雑性
-
[解決済み] Java Genericメソッドをstaticにするには?
-
[解決済み] Oracle DB : java.sql.SQLException: 閉じた接続
-
[解決済み] 警告: コンテキスト初期化中に例外が発生 - 更新の試みはキャンセルされました。
-
[解決済み] Androidのコールバックとは何ですか?重複
-
[解決済み] 1行目2列目でBEGIN_ARRAYを期待したが、BEGIN_OBJECTだった。
-
[解決済み] Java の文字列インデックスが範囲外です。0 [閉店]
-
[解決済み] java.sql.SQLRecoverableException: IO エラーです。NL Exceptionが発生しました
-
[解決済み] Javaコンパイラーエラー:ステートメントではありません