LeetCode*141. Linked List Cycle

LeetCode題目鏈接

題目:

Given a linked list, determine if it has a cycle in it.

Follow up:
Can you solve it without using extra space?

答案:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    bool hasCycle(ListNode *head) {
        ListNode *slow = head;
        ListNode *fast = head; 
        while (slow != NULL && fast != NULL && fast->next != NULL) {
            
            slow = slow->next;
            fast = fast->next->next;
            
            if (slow == fast) {
                return true;
            }
        }
        return false;
    }
};

解析:

題目要求:判斷鏈表中是否存在環(huán), 并且不借助額外空間。

最開始的想法是記錄指針的路線,然后比對。但是不滿足要求。
可以思考能否使用兩個指針來遍歷。網(wǎng)上有一種思路是快慢指針。一個指針每次走一步,另一個指針每次走兩步。如果存在環(huán),那么兩個指針都必然會出現(xiàn)死循環(huán),由于兩個速度不一樣,如果出現(xiàn)指針的值相等,那么就可以判斷出現(xiàn)死循環(huán)了。如果直到結(jié)束都不出現(xiàn),那么說明不存在環(huán)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容