Linked List Cycle

起初看到這個題目,毫無頭緒,沒有理解題目意思,後來在網上看了一下大家的思路,寫一下我現在看到最簡單的一種方法:

  1. 利用兩個指針,slow,fast。兩者均從頭開始,slow每次一步,fast每次2步,如果是一個環的話,它們倆肯定會碰到;
  2. 如果在沒有碰到之前有指針到NULL,則不存在環,因爲fast跑的比較快,只用判斷fast,fast->next是否爲NULL即可;
  3. 邊界條件:如果只有一個節點,則肯定不存在環;
代碼如下:
class Solution {
public:
    bool hasCycle(ListNode *head) {
     ListNode *slow = new ListNode(0), *fast = new ListNode(0);
     slow = head;
     fast = head;
     while(fast != NULL && fast->next != NULL)
     {
         slow = slow->next;         //one step
         fast = fast->next->next;   //two step 
         if(slow == fast)  
            return true;
     }
     return false;
    }
};

發佈了50 篇原創文章 · 獲贊 7 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章