19から141まで。リンクリストサイクル

件名の説明:

それはそれでサイクルを持っている場合、リンクされたリストを考えると、決定します。

与えられたリンクされたリスト内のサイクルを表すために、我々は整数使用  pos 尾部が接続するリンクされたリスト内(0インデックスの)位置を表します。場合  pos で  -1は、リンクされたリストにはサイクルがありません。

 

例1:

入力:ヘッド= [3,2,0、-4]、POS = 1つの
出力:
説明:サイクルはテールが第2ノードに接続されたリンクリスト、です。

例2:

入力:ヘッド= [1,2]、POS = 0 
出力:
説明:サイクルは尾が最初のノードに接続するリンクされたリストです。

例3:

入力:ヘッド= [1]、POS = -1 
出力:
解説:リンクリストにはサイクルがありません。

 

ファローアップ:

あなたは使用してそれを解決することができます  O(1)  (すなわち一定の)メモリを?

最初の実装:

1  DEF hasCycle(自己、ヘッド):
 2      試み3          遅い= ヘッド
 4          ファスト= head.next
 5          ながら遅いがある ではない速い:
 6              遅い= slow.next
 7              高速= fast.next.next
 8          リターン9      を除く10          返す

 

第二実現:

1  クラス溶液(オブジェクト):
 2      DEF hasCycle(自己、ヘッド):
 3          MARKER1 = ヘッド
 4          MARKER2 = ヘッド
 5          ながら MARKER2 =なし! marker2.next =!なし:
 6              MARKER1 = marker1.next
 7              MARKER2 = marker2.next .next
 8              もし MARKER2 == MARKER1:
 9                  リターン真の
 10          リターン

 

分析:この質問は、レーストラック上の2人として見ることができ、それらのいずれかを実行速く、別の人が遅く走りました。トラックはリングなので、最終的に1日を持っている場合は、2人がリングに入ります。1つのリングでは、限り、2つの異なる速度として、それらが満たされます。

おすすめ

転載: www.cnblogs.com/tbgatgb/p/10995640.html