栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Python

NC4 判断链表中是否有环 python

Python 更新时间:发布时间: 百科书网 趣学号

描述
判断给定的链表中是否有环。如果有环则返回true,否则返回false。

数据范围:链表长度 0 ≤ n ≤ 10000 0 leq n leq 10000 0≤n≤10000
要求:空间复杂度 O ( 1 ) O(1) O(1),时间复杂度 O ( n ) O(n) O(n)

输入分为2部分,第一部分为链表,第二部分代表是否有环,然后回组成head头结点传入到函数里面。-1代表无环,其他的数字代表有环,这些参数解释仅仅是为了方便读者自测调试。实际在编码时读入的是链表的头节点。

示例1

输入:{3,2,0,-4},1
返回值:true
说明:第一部分{3,2,0,-4}代表一个链表,第二部分的1表示,-4到位置1,即-4->2存在一个链接,组成传入的head为一个带环的链表 ,返回true

示例2

输入:{1},-1
返回值:false
说明:第一部分{1}代表一个链表,-1代表无环,组成传入head为一个无环的单链表,返回false

示例3

输入:{-1,-7,7,-4,19,6,-9,-5,-2,-5},6
返回值:true

Python实现

# class ListNode:#     def __init__(self, x):#         self.val = x#         self.next = None## # @param head ListNode类 # @return bool布尔型#class Solution:    def hasCycle(self , head ):        # write code here        # 判断链表是否为空,或只有一个Node        if head is None or head.next is None:            return False        else:            # 创建一个空list,用来存放每个Node            # 如果某个Node被再次放入,则存在有环            # cache = []            cache = set() # 用set比list更快            while head:                # 在cache中则存在有环                if head in cache:return True                # 不在cache中则放入                # cache.append(head)                cache.add(head)                head = head.next            return False#         slow = head#         fast = head#         while (fast != None and fast.next != None):#             slow = slow.next#             fast = fast.next.next#             if fast == slow:#                 return True#         return False

使用set的效率(时间快,但空间消耗大):

使用list的效率(时间慢,但空间消耗小):

不使用新空间的效率(时间快,空间消耗也小):

转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/268487.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号