题目描述
给定一个链表,判断链表中是否有环。(Leetcode 141. 环形链表)
为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。
来源:力扣(LeetCode)
解题思路
- 对应剑指offer 23。
- 确定一个链表是否有环,使用快慢指针,快指针一次走两步、慢指针一次走一步。如果走得快的指针追上了走的慢得指针,代表该链表有环。
- 由于快指针一次走两步,需在循环当中优先判断:快指针的下一步
pos_fast.next
为空的情形,否则会出现错误。
Python 代码
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def hasCycle(self, head: ListNode) -> bool:
pos_fast = head
pos_slow = head
while pos_fast:
# 考虑快指针的下一步是否为空
if not pos_fast.next:
return False
pos_fast = pos_fast.next.next
pos_slow = pos_slow.next
if pos_fast and pos_slow:
if pos_fast.val == pos_slow.val:
return True
else:
return False
return False