描述:给定一个链表,判断它是否有环。
思路:采用追赶的方式,设立两个指针slow,fast,都从头结点head开始,每次分别前进一步,两步。如果存在环,两者最终相遇,否则fast会碰到NULL结束。
class Solution {
public:
/**
* @param head: The first node of linked list.
* @return: True if it has a cycle, or false
*/
bool hasCycle(ListNode *head) {
// write your code here
if(head == NULL) return false;//若是空链表,返回false
ListNode *slow = head, *fast = head;
while((slow != NULL) && (fast != NULL) && (fast->next != NULL)){//既要slow和fast不为NULL,也要保证fast->next不为空
slow = slow->next;
fast = fast->next->next;
if(fast == slow) return true;
}
return false;
}
};
拓展:带环链表的相关问题