LeetCode 141. 環形鏈表(python題解)

LeetCode 141. 環形鏈表(python題解)

1 題目

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

爲了表示給定鏈表中的環,我們使用整數 pos 來表示鏈表尾連接到鏈表中的位置(索引從 0 開始)。 如果 pos 是 -1,則在該鏈表中沒有環。

2 示例

示例 1:

輸入:head = [3,2,0,-4], pos = 1
輸出:true
解釋:鏈表中有一個環,其尾部連接到第二個節點。
在這裏插入圖片描述
示例 2:

輸入:head = [1,2], pos = 0
輸出:true
解釋:鏈表中有一個環,其尾部連接到第一個節點。
在這裏插入圖片描述
示例 3:

輸入:head = [1], pos = -1
輸出:false
解釋:鏈表中沒有環。

在這裏插入圖片描述

3 分析

將鏈表想象成跑道,將兩個指針想象成跑道上的賽跑的兩個人。如果跑道是環形跑道,假設兩人從起點開始一直跑,那麼速度快的人遲早會追上速度慢的人(套圈)。

雙指針法:我們設置一快一慢兩個指針,如果鏈表中存在環,那麼快指針將會和慢指針指向同一位置。

4 題解

class ListNodedef __init__(self, x):
		self.val = x
		self.next = None

class Solution:
	def hasCycle(self, head):
		if not head:
			return False
		p1 = p2 = head # 定義兩個指針
		while p1 and p2 and p2.next:
			p1 = p1.next
			p2 = p2.next.next # p1 p2 速度不同
			if p1 == p2:
				return True
		return False		
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章