题目:
给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数pos来表示链表尾连接到链表中的位置(索引从0开始)。 如果pos是 - 1,则在该链表中没有环。
示例1:
输入:head = [3,2,0,-4], pos = 1
输出:true
解释:链表中有一个环,其尾部连接到第二个节点。
示例2:
输入:head = [1,2], pos = 0
输出:true
解释:链表中有一个环,其尾部连接到第一个节点。
示例3:
输入:head = [1], pos = -1
输出:false
解释:链表中没有环。
算法实现: 方法一:
class ListNode(object):
def __init__(self, x):
self.val = x
self.next = None
class Solution(object):
def hasCycle(self, head):
flag = False
a = []
while head:
if head in a:
flag = True
break
a.append(head)
head = head.next
return flag
a = ListNode(1)
a.next = ListNode(5)
a.next.next = ListNode(5)
a.next.next.next = a.next
print(Solution().hasCycle(a))
用一个列表存下每个结点,如果下一个结点在列表里的话就说明有环,反之无环
结果:
由于每次判断都用了in,所以导致运行时间很长
方法二:快慢指针
class ListNode(object):
def __init__(self, x):
self.val = x
self.next = None
class Solution(object):
def hasCycle(self, head):
fast = head
slow = head
while fast and fast.next:
fast = fast.next.next
slow = slow.next
if fast is slow:
return True
return False