PROBLEM:
Given a linked list, determine if it has a cycle in it.
Follow up:
Can you solve it without using extra space?
SOLVE:
bool hasCycle(ListNode *head) {
if(head == NULL || head -> next == NULL)
return false;
ListNode *fast = head;
ListNode *slow = head;
while(fast -> next && fast -> next -> next){
fast = fast -> next -> next;
slow = slow -> next;
if(fast == slow)
return true;
}
return false;
}def hasCycle(self, head):
try:
slow = head
fast = head.next
while slow is not fast:
slow = slow.next
fast = fast.next.next
return True
except:
return False解释:创建两个指针,一个的速度是另一个的两倍,如果有循环那他们就会相遇,叫弗洛伊德判圈算法(龟兔赛跑算法)。
本文介绍了一种使用快慢指针的方法来判断链表中是否存在循环。这种方法也被称为弗洛伊德判圈算法(龟兔赛跑算法),通过设置速度不同的两个指针在链表中移动,如果存在循环则两个指针最终会相遇。
1079

被折叠的 条评论
为什么被折叠?



