首页 > 代码库 > leetcode - Linked List Cycle

leetcode - Linked List Cycle

Given a linked list, determine if it has a cycle in it.

Follow up:
Can you solve it without using extra space?

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
struct ListNode
{
	int val;
	ListNode *next;
	ListNode(int x) : val(x), next(NULL) {}
};
/*
	三种情况:
	1.head == null,返回false
	2.List只有一个结点,返回false
	3.这种情况,要用两个指针,fast,slow.分别遍历list,因为,fast比slow快两倍,所以,找到list的cycle应该是可行的。当fast == slow的时候
	就可以判断存在list的cycle,并且返回true,如果,遍历结束,也没有找到,那么就返回false.
*/
class Solution {
public:
    bool hasCycle(ListNode *head) {
		if(head == NULL) return false;
		if(head->next == NULL) return true;
		ListNode *fast = head->next;
		ListNode *slow = head;
		while(fast != NULL && fast->next != NULL)
		{
			if(fast == slow || fast->next == slow)
			{
				return true;
			}
			slow = slow->next;
			fast = fast->next->next;
		}
		return false;
    }
};


leetcode - Linked List Cycle