Leetcode 141 Linked List Cycle
There is a cycle in a linked list if there is some node in the list that can be reached again by continuously following the next pointer. Internally, pos is used to denote the index of the node that tail’s next pointer is connected to. Note that pos is not passed as a parameter.
Return true if there is a cycle in the linked list. Otherwise, return false.
Follow up: Can you solve it using O(1) (i.e. constant) memory?
Ama bizden devam sorusunda S.C. O(1) olacak şekilde bir çözüm istenmektedir.Bunun için hızlı-yavaş işaretçi (Fast & Slow Pointers) yöntemi kullanılır.Hızlı ve yavaş olacak şekilde iki işaretçi oluştururuz.Hızlı işaretçi her seferinde iki adım ilerlerken yavaş işaretçi bir adım ilerler.Eğer linked list içerisinde bir döngü var ise hızlı ve yavaş işaretçi bir süre sonra aynı adımda buluşacaklardır.Eğer buluşurlarsa true döneriz aksi halde false döneriz.
# Definition for singly-linked list.
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
def hasCycle(self, head: ListNode) -> bool:
fast, slow = head, head
while fast and fast.next:
fast, slow = fast.next.next, slow.next
if fast == slow:
return True
return False