给定一个链表,判断链表中是否有环

【思路】 快慢指针,即慢指针一次走一步,快指针一次走两步,两个指针从链表其实位置开始运行,
**如果链表带环则一定会在环中相遇,**否则快指针率先走到链表的末尾。比如:陪女朋友到操作跑步减肥。

给定一个链表,判断链表中是否有环_第1张图片

bool hasCycle(struct ListNode *head) {

    struct ListNode* slow=head,*flast=head;
    while(flast&&flast->next)//如果链表不是环,那么奇数的时候flast=NULL时停止循环,偶数时flast->next=NULL时停止循环,(反正只要代码会出这个while循环就说明链表不是环)
    {
        flast=flast->next->next;
        slow=slow->next;
        if(flast==slow)
        {
            return true;
        }
    }
    return false;
}

你可能感兴趣的:(链表,数据结构)