下面我会详细讲解“Python3实现的判断环形链表算法示例”的完整攻略。
算法原理
判断环形链表的问题可以通过双指针法来解决。具体步骤如下:
-
定义两个指针:慢指针(
slow
)指向头节点,快指针(fast
)指向头节点的下一个节点。 -
利用循环对链表进行遍历,每次慢指针走一步,快指针走两步。如果快指针碰到了尾节点,说明没有环,直接返回False。
-
如果链表中存在环,那么快指针一定会追上慢指针,这是因为每次循环中,快指针比慢指针多走一步。此时返回True即可。
代码实现
下面是Python3实现的判断环形链表算法示例:
# 定义链表节点
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
class Solution:
def hasCycle(self, head: ListNode) -> bool:
if head is None:
return False
slow, fast = head, head.next
while fast is not None and fast.next is not None:
if slow == fast:
return True
slow = slow.next
fast = fast.next.next
return False
示例说明
示例一
# 构建一个链表
head = ListNode(1)
head.next = ListNode(2)
head.next.next = ListNode(3)
# 测试是否有环
solution = Solution()
has_cycle = solution.hasCycle(head)
print(has_cycle)
# 输出: False
以上代码构建了一个链表,并使用判断环形链表的算法进行判断,输出结果为False,说明链表中不存在环。
示例二
# 构建一个链表
head = ListNode(1)
head.next = ListNode(2)
head.next.next = ListNode(3)
head.next.next.next = head.next
# 测试是否有环
solution = Solution()
has_cycle = solution.hasCycle(head)
print(has_cycle)
# 输出: True
以上代码构建了一个存在环的链表并使用判断环形链表的算法进行判断,输出结果为True,说明链表中存在环。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python3实现的判断环形链表算法示例 - Python技术站