问题描述
给定一个链表,如何判断该链表是否成环?
解题思路
首先,一听到这个问题,脑子一下子映出下面这幅链表成环的图:
快慢指针为啥在有环的链表中为啥一定会相遇
因为快慢指针的差距不管有多少 他们速度不同在环形结构上会逐渐缩小一步直到相遇
代码实现
class ListNode:
def __init__(self, val):
self.val = val
self.next = None
# 借助辅助空间
# class Solution:
# def hasCycle(self, head: ListNode) -> bool:
# a = set()
# while head:
# if head in a:
# return True
# a.add(head)
# head = head.next
# return False
# 快慢指针法
class Solution:
def hasCycle(self,head:ListNode) -> bool:
slow = fast = head
while fast and fast.next: ##保证fast和fast.next有值 不然fast.next.next会报错
slow = slow.next
fast = fast.next.next
if slow is fast:
return True
return False
if __name__ == '__main__':
ln1 = ListNode(1)
ln2 = ListNode(2)
ln1.next = ln2
ln2.next = ln1
r = Solution().hasCycle(ln1)
print(r)
代码实现来源:leetcode
参考链接:https://blog.csdn.net/qq_30108237/article/details/106648460