题解 | #判断链表中是否有环#

判断链表中是否有环

http://www.nowcoder.com/practice/650474f313294468a4ded3ce0f7898b9

思路

用快慢指针的方式,每次让快指针走两步,慢指针走一步。如果快慢指针能相遇则说明链表有环。(因为快慢指针之间的相对距离一直在减小,如果有环快指针早晚可以追上慢指针)

代码实现

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    bool hasCycle(ListNode *head) {
        if(!head) return false;
        ListNode *fast = head;
        ListNode *slow = head;
        while(fast)
        {	
          	//由于快指针一次走两步,所以也要判断fase->next为空
        	if(fast->next==nullptr) return false;
        	fast = fast->next->next;
        	slow = slow->next;
        	if(fast==slow) return true;
        }
        return false;
    }
};
全部评论

相关推荐

11-02 09:49
已编辑
货拉拉_测试(实习员工)
热爱生活的仰泳鲈鱼求你们别卷了:没事楼主,有反转查看图片
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务