leetcode[141]Linked List Cycle Python3实现(快慢指针判断链表是否有环)

# Given head, the head of a linked list, determine if the linked list has a cycl
# e in it. 
# 
#  There is a cycle in a linked list if there is some node in the list that can 
# be reached again by continuously following the next pointer. Internally, pos is 
# used to denote the index of the node that tail's next pointer is connected to. N
# ote that pos is not passed as a parameter. 
# 
#  Return true if there is a cycle in the linked list. Otherwise, return false. 
# 
# 
#  Follow up: 
# 
#  Can you solve it using O(1) (i.e. constant) memory? 
# 
#  
#  Example 1: 
# 
#  
# Input: head = [3,2,0,-4], pos = 1
# Output: true
# Explanation: There is a cycle in the linked list, where the tail connects to t
# he 1st node (0-indexed).
#  
# 
#  Example 2: 
# 
#  
# Input: head = [1,2], pos = 0
# Output: true
# Explanation: There is a cycle in the linked list, where the tail connects to t
# he 0th node.
#  
# 
#  Example 3: 
# 
#  
# Input: head = [1], pos = -1
# Output: false
# Explanation: There is no cycle in the linked list.
#  
# 
#  
#  Constraints: 
# 
#  
#  The number of the nodes in the list is in the range [0, 104]. 
#  -105 <= Node.val <= 105 
#  pos is -1 or a valid index in the linked-list. 
#  
#  Related Topics 链表 双指针 
#  👍 808 👎 0

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

# leetcode submit region begin(Prohibit modification and deletion)

class Solution:
    def hasCycle(self, head: ListNode) -> bool:
        p1 = p2 = head
        while True:
            if p1: p1 = p1.next
            if p2: p2 = p2.next
            if p2: p2 = p2.next
            else: return False
            if p1==p2: return True
# leetcode submit region end(Prohibit modification and deletion)

经典快慢指针解法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值