/**
*Given a linked list, determine if it has a cycle in it.
*Follow up:
*Can you solve it without using extra space?
*/
//Unit Test
//
// |1|-|-->|2|-|-->|3|||
// /|\ |
// | \|/
// |||6|<--|-|5|<--|-|4|
#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; //快指针的步长是2
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; //使用boolalpha输出为bool类型
return 0;
}
LeetCode: Linked List Cycle
最新推荐文章于 2019-09-27 16:12:25 发布