使用的链表相关定义及函数在:链表最小结构(C++版本)
实现思路:
使用两个指针pFrontNode、pBackNode,它们都指向头节点。
每次让pFrontNode向前走2步,pBackNode向前走1步。
如果某次走完后,pFrontNode等于pBackNode,链表有环。
如果pFrontNode已经为空,链表无环。
实现代码:
bool DoesListHasCircle(const MyList& myList)
{
if (nullptr == myList.pHead) return false;
ListNode* pFrontNode = myList.pHead;
ListNode* pBackNode = myList.pHead;
while (pFrontNode != nullptr)
{
if (pFrontNode != nullptr) pFrontNode = pFrontNode->pNext;
if (pFrontNode != nullptr) pFrontNode = pFrontNode->pNext;
pBackNode = pBackNode->pNext;
if (pFrontNode == pBackNode) return true;
}
return false;
}