問題内容
入力されたリストの中にサイクルが存在するか判定する
解答例
sample
class Solution:
def hasCycle(self, head: Optional[ListNode]) -> bool:
slow_pointer = head
fast_pointer = head
while fast_pointer and fast_pointer.next:
slow_pointer = slow_pointer.next
fast_pointer = fast_pointer.next.next
if slow_pointer == fast_pointer:
return True
return False
この問題のポイント
- 移動速度の違う変数が2つ
- 遅い方は1つずつ進み、早い方は2つずつ進む
- サイクルが存在すれば、早い方が遅い方と同じインデックスになりTrueを返す
- サイクルがないときは、早い方が終点について終了しFalseを返す