件名の説明:
リストを指定すると、リストがリングかどうかが決定されます。リングを与えられたリストを表示するために、我々は、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
解释:链表中没有环。
問題解決のアイデア:
ダブルポインタの速度を使用し、高速の手をそれぞれ2つのステップ、スローポインタによって各ステップを取ります。ポインタがすばやくなし来ない場合は、上記フローを横断し、全くリング(連鎖停止の内側環状不在)が存在しません。ポインタとして高速と低速のポインタが、その後、リングがあった場合
コード:
class ListNode(object):
def __init__(self, x):
self.val = x
self.next = None
class Solution(object):
def hasCycle(self, head):
if head == None: return False
slow = head
fast = head.next
while fast!= slow:
if fast == None or fast.next == None or fast.next.next == None:
return False
slow = slow.next
fast = fast.next.next
return True
参考リンク:
leetcodeエンドレスチェーン-141-