问题:https://leetcode.com/problems/linked-list-cycle/
Given a linked list, determine if it has a cycle in it.
分析:如果无环,遍历链表将会走到NULL的位置。如果有环,用两个指针,fast和slow。fast一次走两步,slow一次走一步。fast先出发,slow后出发。再把slow看成在前面,那fast就是在追赶它,每次追一步,如果有环必定会相遇。
代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
bool hasCycle(ListNode *head) {
if(head==NULL) return false;
ListNode *show=head;
ListNode *fast=head;
while(true)
{
if(show->next!=NULL)
show=show->next;
else
return false;
if(fast->next!=NULL && fast->next->next!=NULL)
fast=fast->next->next;
else
return false;
if(show==fast)
return true;
}
return false;
}
};