1、用哈希查找的方法
# -*- coding: utf-8 -*-
"""
@File : hash_has_cycle.py
@Author: zhang_san
@Time : 2020/8/27 22:19
@des : 题目:给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链
表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。
方法一:利用哈希查找的方法,遍历节点,存入hashset中,然后判断是否遍历过
"""
from linked_list import ListNode, generateList, printList
class Solution:
def hasCycle(self, head: ListNode) -> bool:
if head is None or head.next is None:
return False
visited = set()
while head:
if head in visited:
return True
else:
visited.add(head)
head = head.next
return False
2、用快慢指针的方法判断是否有环形
# -*- coding: utf-8 -*-
"""
@File : fast_slow_has_cycle.py
@Author: zhang_san
@Time : 2020/8/27 22:46
@des : 通过快慢指针的方法,判断是否有环形。
用了快慢指针方法,快指针走两步慢指针走一步。如果有闭环,那么快慢指针一定会相遇;如果没有闭环,
那么快指针一定会先走到头,直接return false就好了。
"""
from linked_list import ListNode, generateList, printList
class Solution:
def hasCycle(self, head: ListNode) -> bool:
if head is None or head.next is None:
return False
fast = slow = head
while fast and fast.next:
fast = fast.next.next
slow = slow.next
if fast == slow:
return True
return False