Given a linked list, determine if it has a cycle in it.
Follow up:
Can you solve it without using extra space?
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
struct ListNode
{
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
/*
三种情况:
1.head == null,返回false
2.List只有一个结点,返回false
3.这种情况,要用两个指针,fast,slow.分别遍历list,因为,fast比slow快两倍,所以,找到list的cycle应该是可行的。当fast == slow的时候
就可以判断存在list的cycle,并且返回true,如果,遍历结束,也没有找到,那么就返回false.
*/
class Solution {
public:
bool hasCycle(ListNode *head) {
if(head == NULL) return false;
if(head->next == NULL) return true;
ListNode *fast = head->next;
ListNode *slow = head;
while(fast != NULL && fast->next != NULL)
{
if(fast == slow || fast->next == slow)
{
return true;
}
slow = slow->next;
fast = fast->next->next;
}
return false;
}
};