python如何判断单向链表是否包括环-创新互联
这篇文章主要介绍了python如何判断单向链表是否包括环,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
成都服务器托管,创新互联公司提供包括服务器租用、成都移动机房、带宽租用、云主机、机柜租用、主机租用托管、CDN网站加速、申请域名等业务的一体化完整服务。电话咨询:18982081108关于数据结构相关的面试题,经常会问到链表中是否存在环结构的判断,下图就是存在环结构的链表。
那么如何判断链表中是否存在环呢,下面解法的思路是采用快慢指针:
两个指向头节点的指针,fast和slow,一起从头结点开始往后遍历,fast每次移动两个节点,slow每次移动一个节点,
这样,如果存在环结构,那么fast指针在不断绕环过程中,肯定会追上slow指针。
# -*- coding:utf-8 -*- ''' Created on 2019年10月23日 @author: Administrator ''' class Node(): #定义一个Node类,构造两个属性,一个是item节点值,一个是节点的下一个指向 def __init__(self,item=None): self.item = item self.next = None def findbeginofloop(head):#判断是否为环结构并且查找环结构的入口节点 slowPtr = head #将头节点赋予slowPtr fastPtr = head #将头节点赋予fastPtr loopExist =False #默认环不存在,为False if head == None: #如果头节点就是空的,那肯定就不存在环结构 return False while fastPtr.next != None and fastPtr.next.next != None: #fastPtr的下一个节点和下下个节点都不为空 slowPtr = slowPtr.next #slowPtr每次移动一个节点 fastPtr = fastPtr.next.next #fastPtr每次移动两个节点 if slowPtr == fastPtr : #当fastPtr和slowPtr的节点相同时,也就是两个指针相遇了 loopExist = True print("存在环结构") break if loopExist == True: slowPtr = head while slowPtr != fastPtr: fastPtr = fastPtr.next slowPtr = slowPtr.next return slowPtr print("不是环结构") return False if __name__ == "__main__": node1 = Node(1) node2 = Node(2) node3 = Node(3) node4 = Node(4) node5 = Node(5) node1.next = node2 node2.next = node3 node3.next = node4 node4.next = node5 node5.next = node2 print(findbeginofloop(node1).item)
运行结果:
存在环结构
2
感谢你能够认真阅读完这篇文章,希望小编分享的“python如何判断单向链表是否包括环”这篇文章对大家有帮助,同时也希望大家多多支持创新互联成都网站设计公司,关注创新互联成都网站设计公司行业资讯频道,更多相关知识等着你来学习!
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、网站设计器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
名称栏目:python如何判断单向链表是否包括环-创新互联
文章转载:http://ybzwz.com/article/dpidpg.html