我的代码需要在链表中找到一个循环。如果存在循环,则输出为1
;否则结果为CCD_ 2。我对弗洛伊德的循环算法进行了研究和了解,并发现了其他几篇包含该算法代码的帖子。但我在HackerBank上的一些测试案例失败了。smb能告诉我代码出了什么问题吗?谢谢
int HasCycle(Node head) {
if(head == null){
return 0;
}
Node slow = head;
Node fast = head;
while(true)
{
slow = slow.next;
if(fast.next != null){
fast = fast.next.next;
}
else{
return 0;
}
if(slow == null || fast == null){
return 0;
}
if(slow.data == fast.data){
return 1;
}
}
}
您的问题是当一个链表有.data字段时,例如所有字段都是10。根据你的算法,它总是一个循环。您需要if slow==fast返回1,而不是if slow.data==fast.data.