【Leetcode】环形链表
环形链表
题目
思路
创建一个快指针一次走2步,一个慢指针一次走1步,如果没环,快指针会提前把整个链表遍历完,如果有环,进入环之后,快指针会追上慢指针
快指针一次只能走2步吗?为了提高效率,能否一次走n步?
答:不可以,快指针一次走两步,每次就和慢指针的距离缩小一步,最后一定会相遇,但如果走n步,每次缩小n-1步,在某些极端条件下,快慢指针永远不能相遇
代码实现
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
bool hasCycle(struct ListNode *head)
{
struct ListNode* fast=head;
struct ListNode* slow=head;
while(fast && fast->next)
{
fast=fast->next->next;
slow=slow->next;
if(fast==slow)
return true;
}
return false;
}