Leetcode - 141. Linked List Cycle

想法:

硬記解法

利用快慢指針的概念

快的一次移動兩個位置

慢的一次移動一個位置

照理來說快的跟慢的不會碰到

如果快慢指針有碰到就表示該 list 有循環

如果快的碰到終點就表示該 list 沒有循環

code:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
typedef struct ListNode Node;

bool hasCycle(Node *head) {
    Node* slow = head;
    Node* fast = head;

    if(head == NULL){
        return 0;
    }

    while(fast->next != NULL){
        fast = fast->next->next;
        if(!fast){
            return 0;
        }
        slow = slow->next;
        if(fast == slow){
            return 1;
        }
    }

    return 0;
}

ref:

刷題筆記|Leetcode — Linked List Cycle 題組

留言

這個網誌中的熱門文章

Formal Verification(正規驗證)介紹和如何使用 SVA(System Verilog Assertion) 做驗證

Quartus Qsys + Nios II 入門使用

Quartus Qsys + Nios II + SDRAM 進階使用