题目如下:
题目是判断是否有环,通过龟兔赛跑的思路,用追逐法写。
总体思路是:跑的慢的节点如果追上了跑的快的节点,那么必存在环。首先判断头节点是否为空和头节点的next是否为空(不做判断直接写也可以)。然后初始化快节点和慢节点都为head。接着判断fast和fast->next只要有一个为nullptr,那么不存在环(环不可能存在空节点);否则进入循环,让快的走两步,慢的走一步,如果此时慢节点追上了快的,那么必存在环,返回false;
代码见下:
class Solution {
public:
bool hasCycle(ListNode *head) {
ListNode *fast=head;
ListNode *slow=head;
while(fast!=nullptr&&fast->next!=nullptr){
fast=fast->next->next;
slow=slow->next;
if(fast==slow){
return true;
}
}
return false;
}
};