您的位置:首页 > 其它

LeetCode: Linked List Cycle

2017-05-12 12:04 447 查看
/**
*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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: