Linked List Cycle - 循環鏈表

  • 題目
    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;
    }
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • //leetcode中還有花樣鏈表題,這里幾個例子,冰山一角 求單鏈表中結點的個數----時間復雜度O(n)這是最...
    暗黑破壞球嘿哈閱讀 1,533評論 0 6
  • 背景 一年多以前我在知乎上答了有關LeetCode的問題, 分享了一些自己做題目的經驗。 張土汪:刷leetcod...
    土汪閱讀 12,768評論 0 33
  • 【聲明】歡迎轉載,但請保留文章原始出處→_→文章來源:http://www.lxweimin.com/p/08d08...
    夢工廠閱讀 3,786評論 3 31
  • include<iostream> using namespace std; //單鏈表 typedef stru...
    jmychou閱讀 448評論 0 0
  • 對于單鏈表, 由于每個節點只存儲了向后的指針,到了尾部標識就停止了向后鏈的操作,也就是說按照這樣的方式,只能索引后...
    AceKitty閱讀 1,096評論 0 1