·题目描述
·解题思路
——————遍历链表,哈希表记录节点——————
时间复杂度O(n),空间复杂度O(n)
1.cur指针遍历链表,并且创建哈希表,用于记录节点的地址
2.每次遍历先判断地址是否在哈希表中,若在则直接返回True;否则,将地址装如哈希表,并且cur指针向后移动
·代码
class Solution:
def hasCycle(self, head: ListNode) -> bool:
cur = head
dict_map = set()
while cur:
if cur in dict_map:
return True
dict_map.add(cur)
cur = cur.next
return False
————————快慢指针遍历——————
时间复杂度O(n),空间复杂度O(1)。当最后一个指针回指到头节点的时候,slow指针再次回到头节点的时候,slow和fast相遇,所以时间复杂度为O(n)
1.slow指针每次移动一步
2.fast指针每次移动两步
3.循环的条件为fast != none and fast.next != none
·代码
def hasCycle(self, head: ListNode) -> bool:
slow , fast = head ,head
while fast and fast.next:
slow = slow.next
fast = fast.next.next
if slow is fast:
return True
return False