描述:給定一個鏈表,判斷它是否有環。
思路:採用追趕的方式,設立兩個指針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;
}
};
拓展:帶環鏈表的相關問題