件名の説明:
それはそれでサイクルを持っている場合、リンクされたリストを考えると、決定します。
与えられたリンクされたリスト内のサイクルを表すために、我々は整数使用 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つの異なる速度として、それらが満たされます。