您的位置:首页 > 其它

判断单向链表中是否有环

2015-09-21 15:41 239 查看
//判断单链表中是否有环

/*

基本思想:用两个指针,pSlow和pFast,一个快一个慢。

慢的跳一次,快的跳两次。当快的追上慢的的时候就表示有环了

*/

struct listtype

{

int data;

struct listtype* next;

}list;

int find_circle(list *head){

list *pfast = head;

list *pslow = head;

//首先判断是不是空的链表

if (pfast == NULL)

return -1;

//当链表非空而且有一个节点的时候或者剩下当前的和之后的一个非空节点时

//pfast-next非空 保证pfast->next->next不会出现指向空指针的下一个的情况

while (pfast&&pfast->next)

{

pfast = pfast->next->next;

pslow = pslow->next;

if (pfast == pslow)

return 1;

}

return 0;

}

/*

调用函数返回1时,表示单向链表有环;

返回-1时,表示为空;

返回值为0时,表示单向链表无环。

*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: