leetcode-141. 環形鏈表刷題筆記(c++)

寫在前面

  • 首先思路正確是高效解題的關鍵
  • 戰略性失誤,思路腫是錯怎麼破 ==||

題目詳情

給定一個鏈表,判斷鏈表中是否有環。

爲了表示給定鏈表中的環,我們使用整數 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
	解釋:鏈表中沒有環。

進階:
你能用 O(1)(即,常量)內存解決此問題嗎?
  • 注意事項
    • 鏈表中可以存在重複元素

ac代碼

  • 快慢指針思想
    • 設定2個指針,如果快指針追上慢指針則有環;如果指向NULL則無環。
    • 注意判斷快指針的next是否爲NULL
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
class Solution
{
public:
    bool hasCycle(ListNode *head)
    {
        ListNode *l1 = head, *l2 = head;
        while(l1 != NULL && l2 != NULL && l2->next != NULL)
        {
            l1 = l1 -> next;
            l2 = l2 -> next -> next;
            if(l1 == l2)
                return true;
        }
        return false;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章