1

判断链表中是否有环

描述
判断给定的链表中是否有环,如果有环则返回True,否则返回False
数据范围:链表长度\(0\le n\le 1000\), 链表中任意节点的值满足\(\mid val\mid \le 100000\)
输入分为两部分,第一部分为链表,第二部分代表是否有环,然后将组成的head头结点传入到函数里面。-1代表无环,其它的数字代表有环,这些参数解释仅仅是为了方便读者自测调试。实际在编程时读入的是链表的头节点。

解法思路:利用快慢指针,快指针前进2步,慢指针前进1步,如果有环,总能相遇,如果没环,则快指针会先行到达链表的尾部变为None

代码:

class Solution:
    def hasCycle(self , head: ListNode) -> bool:
        p1 = p2 = head # p1为慢指针,p2位快指针
        while p2 and p2.next:
            p1 = p1.next # 慢指针走一步
            p2 = p2.next.next # 快指针走两步
            if p1 == p2: # 如果相遇,则说明有环
                return True
        return False
posted @ 2024-03-19 16:56  Bonne_chance  阅读(11)  评论(0编辑  收藏  举报
1