141. 環(huán)形鏈表(easy)

給定一個(gè)鏈表,判斷鏈表中是否有環(huán)。
為了表示給定鏈表中的環(huán),我們使用整數(shù) pos 來(lái)表示鏈表尾連接到鏈表中的位置(索引從 0 開(kāi)始)。 如果 pos 是 -1,則在該鏈表中沒(méi)有環(huán)。
示例 1:
輸入:head = [3,2,0,-4], pos = 1
輸出:true
解釋:鏈表中有一個(gè)環(huán),其尾部連接到第二個(gè)節(jié)點(diǎn)。
示例 2:
輸入:head = [1,2], pos = 0
輸出:true
解釋:鏈表中有一個(gè)環(huán),其尾部連接到第一個(gè)節(jié)點(diǎn)。
示例 3:
輸入:head = [1], pos = -1
輸出:false
解釋:鏈表中沒(méi)有環(huán)。
進(jìn)階
你能用 O(1)(即,常量)內(nèi)存解決此問(wèn)題嗎?

  • show the code:
# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = None
#### code1(hash)
class Solution(object):
    def hasCycle(self, head):
        """
        :type head: ListNode
        :rtype: bool
        """
        if not head:
            return False
        dic = {head}
        while head:
            head = head.next
            if head not in dic:
                dic.add(head)
            else:
                return True
        return False
### code2(two pointers)
class Solution(object):
    def hasCycle(self, head):
        """
        :type head: ListNode
        :rtype: bool
        """
        if not head:
            return False
        slow = head
        quick = head.next
        while slow != quick:
            if not quick or not quick.next:
                return False
            slow = slow.next
            quick = quick.next.next
        return True
  • 此題有兩種方法:一種是建立一個(gè)集合來(lái)存儲(chǔ)先前遍歷過(guò)的節(jié)點(diǎn),也就是哈希法,如果之后出現(xiàn)重復(fù)的節(jié)點(diǎn),那么可以判斷鏈表中存在環(huán)(注意這里集合存儲(chǔ)的是節(jié)點(diǎn)內(nèi)存地址而不是節(jié)點(diǎn)值)
  • 由于題目進(jìn)階版要求O(1)的空間復(fù)雜度,所以哈希表肯定是不行的,不使用額外空間的話考慮使用快慢指針?lè)?,所謂的快慢指針就是指兩個(gè)指針,一個(gè)指針一次走一步即慢指針,一個(gè)一次走兩步即快指針,也是這種鏈表問(wèn)題的常見(jiàn)方法。我們知道如果鏈表中存在環(huán),那么快慢指針一定會(huì)相遇,至于什么時(shí)候相遇,我們可以近似認(rèn)為這取決于環(huán)的長(zhǎng)度。如果兩指針相遇,則說(shuō)明存在環(huán),如果遍歷到null,說(shuō)明不存在環(huán)。
  • 有關(guān)時(shí)間和空間復(fù)雜度看官方題解分析:
  • 復(fù)雜度分析
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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