问题描述:
给定一个链表,请判断链表中是否有环。
为了表示给定链表中的环,我们使用整数pos来表示链表尾链接到链表中的位置(索引从0开始),如果pos是-1,则在链表中没有环。
问题分析:
本题我们可以采用快慢指针来进行求解。假设快指针是慢指针的1倍速度,那么如果成环的话,肯定会在某一次遍历之后出现fast = slow的情况。于是就说这个链表是形成了环。
/**
* 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) return false;
auto slow = head, fast = head->next;
while(slow != fast)
{
if(!fast || !fast->next) return false;
slow = slow->next;
fast = fast->next->next;
}
return true;
}
};