题目:写个算法,判断在一个单向链表中是否存在循环链表。
有个经典的算法就是解决这个问题的,好象是叫快慢法.他的原理是,如果A,B两人从同一地点出发,B的速度大于A,那么如果存在一个环的话,B和A肯定是能再见面的.
bool IsLoop( link* head) { link* s = head; //移动缓慢的指针 link* f = head; //移动快速的指针 do { if( s == NULL ) return (false ); s = s->next; //一次向前移动一个 if( f== NULL ) return (false ); f = f->next; if( f== NULL ) return (false ); f = f->next; //一次向前移动2个 }while( f!= s); return (f!=NULL); }