- 思路
- 代码
one_step指针每轮循环向前走一步
double_step指针每轮循环向前走两步
double_step指针速度快于double_step指针
double_step指针判断前面两步是否为null,若为空则说明无环形
再判断前面两步是否与one_step指针相逢,若相逢说明有环形
bool hasCycle(struct ListNode *head) {
if(head==NULL) return false;
struct ListNode *one_step=head,*double_step=head->next;
bool ret = false;
while(1){
if(double_step==NULL || double_step->next==NULL) break;
if(double_step==one_step || double_step->next==one_step){ ret=true;break;}
one_step = one_step->next;
double_step = double_step->next->next;
}
return ret;
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)