怎么判断单链表里面是否有环
如何判断单链表里面是否有环
定义两个指针p、q,然后让p、q同时从链表头向后查找,注意他们移动的步幅是不同的分别为a
定义两个指针p、q,然后让p、q同时从链表头向后查找,注意他们移动的步幅是不同的分别为a
、b,例如p指针每次执行一次【p = p->next;】q每次执行两次【q = q->next;】,如果q先到链尾【if(q->next == NULL)】则没有死循环(这里假设q比p的移动速度要快),如果p、q在此之前相遇了则有死环。
实现的函数如下:
bool CircleInList(Link* pHead) { if(pHead == NULL || pHead-> next == NULL)//无节点或只有一个节点并且无自环 { return (false); } if(pHead-> next == pHead)//自环 { return (true); } Link *pTemp1 = pHead;//step 1 Link *pTemp = pHead-> next;//step 2 while(pTemp != pTemp1 && pTemp != NULL && pTemp-> next != NULL) { pTemp1 = pTemp1-> next; pTemp = pTemp-> next-> next; } if(pTemp == pTemp1) { return (true); } return (false); }