/**
*Given a linked list, determine if it has a cycle in it.
*Follow up:
*Can you solve it without using extra space?
*/
#include<iostream>
using namespace std;
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
class Solution
{
public:
Solution();
~Solution();
bool hasCycle(ListNode* head){
if(head==NULL){
return false;
}
ListNode* fast = head;
ListNode* slow = head;
while(fast->next!=NULL){
fast=fast->next->next;
if(fast == NULL){
return false;
}
slow = slow->next;
if(fast == slow){
return true;
}
}
return false;
}
};
int main(){
ListNode node1(1);
ListNode node2(2);
ListNode node3(3);
ListNode node4(4);
ListNode node5(5);
ListNode node6(6);
node1.next = &node2;
node2.next = &node3;
node3.next = &node4;
node4.next = &node5;
node5.next = &node6;
node6.next = &node1;
Solution s;
cout<<boolalpha<<s.hasCycle(&node1)<<endl;
return 0;
}