LeetCode | 0141.リンクリストサイクル循環リンクリスト[パイソン]

LeetCode 0141.リンク一覧サイクル簡単円形のリンクリスト[] [] [Pythonのダブルポインタ]

タイトル

英語のタイトル住所

それはそれでサイクルを持っている場合、リンクされたリストを考えると、決定します。

与えられたリンクされたリストにサイクルを表すために、我々は整数使用pos尾に接続するリンクされたリスト内の位置(0インデックス)を表します。場合pos-1は、リンクされたリストにはサイクルがありません。

例1:

Input: head = [3,2,0,-4], pos = 1
Output: true
Explanation: There is a cycle in the linked list, where tail connects to the second node.

IMG

例2:

Input: head = [1,2], pos = 0
Output: true
Explanation: There is a cycle in the linked list, where tail connects to the first node.

IMG

例3:

Input: head = [1], pos = -1
Output: false
Explanation: There is no cycle in the linked list.

IMG

ファローアップ:

あなたは使用してそれを解決することができますO(1) すなわち一定の)メモリを?

翻訳

中国のタイトル住所

リストを指定すると、リストがリングかどうかが決定されます。

リングを与えられたリストを表示するために、我々は、整数を使用してpos(インデックス0から始まる)リストのリストの最後に接続された位置を示します。場合pos-1、このリストにはループがありません。

例1:

输入:head = [3,2,0,-4], pos = 1
输出:true
解释:链表中有一个环,其尾部连接到第二个节点。

IMG

例2:

输入:head = [1,2], pos = 0
输出:true
解释:链表中有一个环,其尾部连接到第一个节点。

IMG

例3:

输入:head = [1], pos = -1
输出:false
解释:链表中没有环。

IMG

高度:

あなたは使用することができますO(1)この問題を解決するために(すなわち、一定の)メモリを?

思考

ダブルポインタ

ダブルポインタによる高速と低速では、ポインタの速度速い遅い速度はチェーンがリングを持っている場合は、ダブルポインタの速度が、満たされる、倍増され、ここでリンクを証明します

宇宙複雑:O(1)

Pythonコード

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution(object):
    def hasCycle(self, head):
        """
        :type head: ListNode
        :rtype: bool
        """
        if head == None:
            return False
        slow, fast = head, head  # 快慢双指针
        while fast.next != None and fast.next.next != None:  # 一定是 fast.next 和 fast.next.next
            slow = slow.next
            fast = fast.next.next  # fast快指针速度是slow慢指针的两倍
            if slow == fast:  # 如果链表有环, fast 和 slow 必会相遇
                return True
        return False

コードアドレス

GitHubのリンク

おすすめ

転載: www.cnblogs.com/wonz/p/12302922.html