云计算百科
云计算领域专业知识百科平台

关于力扣的环形链表的判断

关于环形链表,这里我们选用双指针里面的快慢指针来判断一个链表是不是带环,我们在得到一个链表的头结点的时候,我们定义两个指针,一个指针一次走一步,一个指针一次走两步,这样这两个指针每次的差值就是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;
}

赞(0)
未经允许不得转载:网硕互联帮助中心 » 关于力扣的环形链表的判断
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!