一、题目
题目描述
判断给定的链表中是否有环。如果有环则返回true,否则返回false。
你能给出空间复杂度的解法么?
二、思路
1、利用快慢指针,快指针一次走两步,慢指针一次走一步
2、注意判断条件,fast !=nullptr && fast->next !=nullptr;两个都要,不然会报出超出索引的错误
三、代码
/**
* 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 ==nullptr || head->next==nullptr || head->next->next ==nullptr)
{
return false;
}
//快慢指针
ListNode *fast=head,*slow=head;
while(fast !=nullptr && fast->next !=nullptr)
{
fast=fast->next->next;
slow=slow->next;
if(fast==slow)
{
return true;
}
}
return false;
}
};
class Solution {
public:
bool hasCycle(ListNode *head) {
ListNode *fast=head;
ListNode *slow=head;
while(fast!=NULL && fast->next!=NULL){
fast=fast->next->next;
slow=slow->next;
if(fast==slow){
return true;
}
}
return false;
}
};