ホームページ >Java >&#&チュートリアル >巡回または非巡回リンクリストの交差問題
一方または両方に循環がある場合でも、2 つのリンク リストが交差するかどうかを判断するために使用できるアルゴリズムがいくつかあります。一般的なアプローチの 1 つは、フロイドのサイクル検索アルゴリズムを使用して、各リスト内のサイクルの存在を検出することです。いずれかのリストにサイクルがある場合、アルゴリズムはサイクルの開始点を返します。両方のリストにサイクルがある場合、アルゴリズムは共通のサイクルの開始点を返します。サイクルが検出されると、各リストのサイクルの開始点から開始して、両方のリストを同時に走査することによって交点を見つけることができます。交点は、両方のリストに共通する最初のノードです。
フロイドのサイクル検索の時間計算量アルゴリズムは O(n) です。ここで、n は 2 つのリンクされたリスト内のノードの合計数です。リンクされたリストによって既に占有されているスペースを超える追加のスペースを必要としないため、アルゴリズムのスペース複雑度は O(1) です。
サイクルを含む交差するリンク リストの交点を見つけるための他のアルゴリズムには、Tortoise が含まれます。ヘアアルゴリズムとブレントアルゴリズム。これらのアルゴリズムは、フロイドのサイクル発見アルゴリズムと同様の時間および空間の複雑さを持っています。
交差しないリンク リストの交点は、フロイドのサイクル検索アルゴリズムを使用して各リスト内のサイクルの存在を検出することにより、サイクルの存在を考慮するように適合させることができます。いずれかのリストにサイクルがある場合、アルゴリズムを使用してサイクルの開始点を返すことができます。両方のリストにサイクルがある場合、アルゴリズムを使用して共通のサイクルの開始点を返すことができます。サイクルが検出されると、各リスト内のサイクルの開始点から開始して、両方のリストを同時に走査することによって交点を見つけることができます。交点は、両方のリストに共通する最初のノードです。
以上が巡回または非巡回リンクリストの交差問題の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。