一道简单的算法面试题,求牛人解答。该如何处理

一道简单的算法面试题,求牛人解答。。。。


如何判断单链表有环?



------解决方案--------------------
用两个指针,一个每次移动一步,另一个每次移动两步,会相遇就有环
------解决方案--------------------
设置两个指针p1,p2。每次循环p1向前走一步,p2向前走两步。直到p2碰到NULL指针或者两个指针相等结束循环。如果两个指针相等则说明存在环。

bool IsLoop(link* head)
{
link* p1=head, *p2 = head;
if (head ==NULL || head->next ==NULL) {
return false;
}
do{
p1= p1->next;
p2 = p2->next->next;
} while(p2 && p2->next && p1!=p2);
if(p1 == p2)
return true;
else
return false;
}

------解决方案--------------------
非递归方式反转:
a->b->c->d->b...
a<-b c->d->b...
a<-b<-c d->b...
a<-b<-c<-d b->a
...d<-b<-c<-d a
返回到了头节点 a