·题目描述
·解题思路
——————遍历链表,哈希表记录节点——————
时间复杂度O(n),空间复杂度O(n)
1.cur指针遍历链表,并且创建哈希表,用于记录节点的地址
2.每次遍历先判断地址是否在哈希表中,若在则直接返回True;否则,将地址装如哈希表,并且cur指针向后移动
·代码
class Solution:def hasCycle(self, head: ListNode) -> bool:cur = headdict_map = set()while cur:if cur in dict_map:return Truedict_map.add(cur)cur = cur.nextreturn 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 ,headwhile fast and fast.next:slow = slow.nextfast = fast.next.nextif slow is fast:return Truereturn False