長さが不明な片方向リストがあるとします。テールまで M ステップのノードを見つけたいとします。
たとえば、単独のリストは次のようになります: (A)->(B)->(C)->(X)->(Y) および M = 2. この場合、出力は (C) へのポインターになります。
このクイズに直面したとき、私の最初の反応は、単一リンク リストをトラバースして長さ N を取得することです。次に、2 回目は単一リンク リストをトラバースしますが、NM-1 ステップだけを進めます。時間の計算量は O(n) で、空間の計算量は O(1) です。
次に、ワントラバース方式でそれを行うための解決策を見つけることに挑戦します。解決策は、2 つのポインタを持つことです。2 番目のポインターは、最初のポインターより M ステップ遅れています。これらの 2 つのポインターは、同じペースで前進します。最初のポインターが末尾に到達すると、2 番目のポインターが結果になります。
この質問について深く考えてみた結果、2 番目の「トリッキーな」解決策が最初の解決策よりも優れているとは思えません。これは 1 回のトラバースですが、2*NM ポインターの割り当ても伴います。
この質問について考えたことはありますか?本当に高速な他のソリューションはありますか?