サイズがわからない循環リンクリストの最後のノードを見つける方法最後のノードはリンクされたリストの最初のノードを除く他のノードを指していますか?サイズが不明で、最後のノードがリンクリストの最初のノードを除く任意のノードを指している循環リンクリストの最後のノードを見つける
答えて
ノードが循環リンクリストの最初のノードを指していない場合、
ノードは最後のノードではありません。
ここで詳しく説明できますか?
あなたが最後かどうかを知らせるリストのノードにパラメータを追加することはできますか?私はそれが問題ではないと思う。
それ以外の場合は、すでにvistedしているノードを覚えておくことができます。次のノードが既に訪問されている場合、あなたは最後にいる。
奇妙なリスト...なぜこのようなものが必要でしょうか?しかし、とにかく...
単純にすべてのノードを反復し、次のノードが既に訪れたノードになるとすぐに停止できます。現在のノードがあなたの答えになります。
訪問したノードを追跡するには、何らかの方法が必要です。ブール値フラグを各ノードに追加するか、または高速挿入と検索(例:ハッシュセット)を伴う何らかの種類のセットデータ型を使用します。このために使用することができる
1つのアルゴリズムは、フロイド・サイクル・アルゴリズムは、リストの最後の要素を与えることはありませんthis question.
Floydのアルゴリズムへのポインタをありがとう。非常に素晴らしい。私はSteve Skienaのアルゴリズムの本でこれについてのパズルを見て、最高の答えが何であるか疑問に思った。 http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1848000693/ – khedron
を参照してください。またFloyd cycle algorithm.
です。それはサイクルがあるかどうかだけを伝えます。
最後の定義の定義は、最初のものから順番にスキャンを実行している間に、その前のすべての要素と最後の要素が表示されていないことです(ポインタ値)。最後のものは、この順次スキャンで既に見られた最初の要素になります。
簡単な解決策は訪問済みの要素にフラグを立てて、既に見られた要素が容易に検出されるようにすることです。フラグは、侵入的であってもよく、すなわち、要素内のビットを変更することによって、またはポインタ値を格納するためにハッシュテーブルを使用することによって外部から変更することができる。
要素がすでに訪問されているかどうかをテストする必要があるため、私は別の解決策を見ません。
私はこの問題を解決するためにフロイドのアルゴリズムを使用する方法について詳しく説明することができますが、私は一歩
- についての説明は、2つのポインタが、ポインタ1は1の割合で起こって、リンクリストをトラバース持って理解していません2つ目のノードは2ノードの割合で実行されます
- ポインタが一致すると、サイクルが終了し、ポインタ1がサイクルの最後に到達するまでにある程度距離があります(ポインタ1が到達していないサイクルが距離dでポインタ2が1の速度の2倍になると、ポインタ1はポインタ1が一度それを行う前にサイクルを2回ループするからです)
- したがって、ポインタ1がサイクルを完全に横断する前に満たされているので、このミーティングポイントはサイクル内の開始ノードからk個のノードまでのd個のノードです(pos = d + k)
- ポインタ1をposition 0に設定し、両方の点を再び開始します(反復ごとに1つのノードの率が同じである)が、サイクルの開始時に一致します。
- 我々はサイクルの開始を知っているので、ステップ4が真である理由の端を見つけること
簡単です私は完全には理解していないが、私は友人が私に解決策を説明しました。
- 1. リンクリストの最後のノード
- 2. リンクリストの最後にノードを挿入
- 3. Javaのリンクリスト。リストの最後のノードをヌルを含めるのではなく最初のノードにする
- 4. リンクリストの最後のノードをリンクするとプログラムがクラッシュする
- 5. リンクリストの最後のノードを削除できません
- 6. リンクリストの最初のノードを削除する(C++)
- 7. 第3のノードからの循環リンクリスト
- 8. 最後のノードでリンクリストをクラッシュさせる
- 9. C++循環リンクリスト - すべてのノードを削除する
- 10. リンクリストの最後にノードを挿入する
- 11. リンクリストの最後にノードを追加する
- 12. リンクリストの最後にノードを挿入する
- 13. リンクリストの最初のノードを削除しても結果にノードが表示される
- 14. Javaの循環リンクリストからノードを削除する方法は?
- 15. 二重リンクリストにノードを追加すると、最初のノードを除くすべてのノードが削除されるのはなぜですか?
- 16. XSLT後の子ノードで最初の子ノード値を使用
- 17. linked list:最後のノードを削除する方法。単一のリンクリストで最後のノードへのポインタを持つ方法
- 18. 循環リンクリストの最後にノードを挿入するのに時間の複雑さ?
- 19. ランダムなノード、最初のノードを作る
- 20. xpath/xslt:サブノードに応じて最後のノードを見つける
- 21. 最後にノードを追加する方法(単一リンクリスト)
- 22. 二重リンクリスト内のノードの後にあるノードを削除する
- 23. リンクリストに最後にノードを追加すると、C++のセグメンテーションフォルトが発生する
- 24. 階層ツリーの最後のノードを見つける方法C#
- 25. Pythonとハッシュテーブルを使用してリンクリストの最後からn番目のノードを見つけよう
- 26. C-リンクリストの最後にノードを追加しようとするとクラッシュする
- 27. リンクリストの最初のノードに迷惑データがあるのはなぜですか?
- 28. ディクテーションでツリーの最初のノードを見つける方法は?
- 29. 任意の数の子を持つノードのツリー内のノードを見つける
- 30. 任意のツリー内でn個の最大ノードを見つける
ノードが最初のノードではなく別のノードを指している場合、そのノードはどのように最後のノードですか? – nik