思想:1:首先判断该链表是否为空,
2:只有一个元素判断是否自己指向自己本身或者最后一个元素指向本身
3:排除前二个情况下,进行判断是否有回环
4:首先定义二个指针M,P,① P指针指向第二个元素,M指针负责从头开始判断当前地址是否和P指针地址相同,相同就返回true; ②如果二个指针指向同一个地方跳出循环,P=P->next;③往返此过程
下面给出代码:
bool hasCycle(struct ListNode *head) {
if(head==NULL||head->next==NULL) return false; //空链表或只有一个元素
if(head->next==head) return true; //一个元素自己指向自己
struct ListNode *P=head->next;
while(P->next!=NULL){
struct ListNode *M = head;
for(int i=0;;i++){
if(M==P->next) return true; //M指针和P指针后继相同,有回环
if(M==P) break; //二个指针指向同一个位置,出循环
M = M->next;
}
P = P->next;
}
return false;
}
个人想法,不好的地方欢迎指出



