題目:
Given a linked list, determine if it has a cycle in it.
Follow up:
Can you solve it without using extra space?
給出一個鏈表,判斷他是否是一個循環鏈表(不開辟多余的內存空間進行解決,意思是在利用鏈表本身的特性進行解決問題)分析:
我們可以開辟兩個指針節點,一個快的節點,每次跳躍兩步,一個慢的節點,每次跳躍一步,然后進行一個while循環,如果兩個指針節點相同出現相同的情況下,那么說明是存在環的代碼:
bool hasCycle(ListNode *head) {
if (head == NULL || head->next == NULL) {
return false;
}
ListNode *fastNode = head;
ListNode *slowNode = head;
while (fastNode->next != NULL && fastNode->next->next != NULL) { // 由于fastNode比slowNode增長快,所以只需要判斷fastNode,同時對于fastNode需要判斷后兩位,所以第一位的判斷也是必須的,不然會出現Runtime Error
fastNode = fastNode->next->next; // 每次往后移動兩步
slowNode = slowNode->next; // 每次往后移動一步
if (fastNode == slowNode) {
return true;
}
}
return false;
}