【LeetCode】141. 環形連結串列
阿新 • • 發佈:2020-07-03
給定一個連結串列,判斷連結串列中是否有環。
為了表示給定連結串列中的環,我們使用整數 pos 來表示連結串列尾連線到連結串列中的位置(索引從 0 開始)。 如果 pos 是 -1,則在該連結串列中沒有環。
示例 1:
輸入:head = [3,2,0,-4], pos = 1
輸出:true
解釋:連結串列中有一個環,其尾部連線到第二個節點。
示例2:
輸入:head = [1,2], pos = 0
輸出:true
解釋:連結串列中有一個環,其尾部連線到第一個節點。
示例 3:
輸入:head = [1], pos = -1
輸出:false
解釋:連結串列中沒有環。
來源:力扣(LeetCode)
【解題思路】
快慢指標技巧:
通過使用具有 不同速度 的快、慢兩個指標遍歷連結串列。慢指標每次移動一步,而快指標每次移動兩步。
如果連結串列中不存在環,最終快指標將會最先到達尾部,此時我們可以返回 false。
如果連結串列中存在環,則快指標和慢指標最終會相遇,即快指標等於慢指標,此時我們返回true。
【提交程式碼】
1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val;5 * struct ListNode *next; 6 * }; 7 */ 8 bool hasCycle(struct ListNode *head) { 9 struct ListNode *fast; 10 struct ListNode *slow; 11 12 if( head == NULL || head->next == NULL ) 13 return false; 14 15 fast = head->next; 16 slow = head; 17 while( fast != slow )18 { 19 if( fast == NULL || fast->next == NULL ) 20 return false; 21 22 fast = fast->next->next; 23 slow = slow->next; 24 } 25 26 return true; 27 }