C++ 找出链表是否有循环[代码战争问题]

C++ 找出链表是否有循环[代码战争问题],c++,C++,我的代码适用于大多数解决方案,但由于某种原因,它在一个测试用例中失败。有人能看一下我的代码并向我解释一下我的逻辑有什么问题吗。这里是代码战的链接这个问题背后的逻辑是使用两个指针:一个快速指针和一个慢速指针。如果存在循环,快将赶上慢。如果没有循环,fast将首先到达终点 您的代码没有像这样禁用逻辑。我不知道你想做什么。这是我的密码: bool hasCycle(节点*头部) { 节点*fast=head,*slow=head; while(快速-&快速->下一步){ 快速=快速->下一步->下一步

我的代码适用于大多数解决方案,但由于某种原因,它在一个测试用例中失败。有人能看一下我的代码并向我解释一下我的逻辑有什么问题吗。这里是代码战的链接这个问题背后的逻辑是使用两个指针:一个快速指针和一个慢速指针。如果存在循环,
将赶上
。如果没有循环,
fast
将首先到达终点

您的代码没有像这样禁用逻辑。我不知道你想做什么。这是我的密码:

bool hasCycle(节点*头部)
{
节点*fast=head,*slow=head;
while(快速-&快速->下一步){
快速=快速->下一步->下一步;
慢=慢->下一步;
如果(fast==slow)返回true;//在这里,fast捕捉到了slow
}
return false;//此处快速到达链接列表的末尾
}

我不明白如何
p=p->next可以通过任何测试用例<代码> P<代码>是代码> null <代码>,代码提示中没有其他任何东西:C++中使用 NulLPTR>代码>,优先于C的无类型代码> null < /C>。在这里,只要返回p==q就足够了。剩下的都是杂乱无章的东西。这个代码不起作用。它不测试循环。它包含了你应该在这样的解决方案中看到的元素,但它们真的很混乱。@maximu_prime_是_463035818是的,这很有意义,因为我不能去下一个地方,因为我的P是空的,我应该把它放在头上。啊,好的,我知道了。
bool hasCycle(Node * head)
{
  Node *p = NULL;
  Node *q = head;
  
  while(q)
  {
    q = q->next;
    if(q->next != NULL) q = q->next;
    p = p->next;
  }
  return p == q ? true : false;
}