1. 程式人生 > >Leetcode141| 環形連結串列

Leetcode141| 環形連結串列

Leetcode141| 環形連結串列

  • 題目描述
    給定一個連結串列,判斷連結串列中是否有環
  • 解題思路
    利用快慢指標, p1= head, p2= head->next, p1為慢指標,p2為快指標, p1每次走一步, p2每次走2步,速率差為1, 經過次數為 兩者距離除以/ 兩者差速,幾乎等於環形的長度K。時間複雜度為O(n)。
    • 程式碼
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    bool hasCycle(ListNode *head) {
       ListNode* p1, *p2;
       if(!head){
           return false;
       }
       if(!head->next){
           return false;
       }
       p1 = head;
       p2 = head->next;
       while(p1 != p2){
           if(p2 == NULL || p2->next ==NULL){
               return false;
           } 
           p1 = p1->next;
           p2 = p2->next->next;
       }
       return true;
    }
};