这篇文章主要介绍了python如何判断单向链表是否包括环,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
关于数据结构相关的面试题,经常会问到链表中是否存在环结构的判断,下图就是存在环结构的链表。
那么如何判断链表中是否存在环呢,下面解法的思路是采用快慢指针:
两个指向头节点的指针,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如何判断单向链表是否包括环”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。