

关于环形链表,这里我们选用双指针里面的快慢指针来判断一个链表是不是带环,我们在得到一个链表的头结点的时候,我们定义两个指针,一个指针一次走一步,一个指针一次走两步,这样这两个指针每次的差值就是1,这样的话如果链表带环,那么他们肯定会在环里面相遇,他们每次的距离都会缩小1。
因为快指针会每次走两步所以可能会出现越界的情况,我们可以控制一下fast和fast-》next,这样fast走两步之后最多走到空指针,毕竟fast-》next不为空,它的下一个可能为空也可能不是空,所以这样就不会出现对空指针的解引用的情况,就避免了对空指针解引用来导致题目越界的情况。
bool hasCycle(struct ListNode *head) {
if(head == NULL || head->next == NULL || head->next->next == NULL)
{
return false;
}
struct ListNode* slow = head;
struct ListNode* fast = head;
while(fast && fast->next)
{
slow = slow->next;
fast = fast->next->next;
if(fast == slow)
{
return true;
}
}
return false;
}
网硕互联帮助中心





评论前必须登录!
注册