Fork me on GitHub

面试常考算法题02

今天是这个系列博文的第二篇。今天我们讲的是也是面试最常考的经典算法题之一—判断一个单链表是否有环。好了,其他话不多说,让我们一起来看看这道题吧!


环形链表

给定一个链表,判断链表中是否有环。

为了表示给定链表中的环,我们使用整数pos来表示链表尾连接到链表中的位置(索引从0开始)。 如果pos-1,则在该链表中没有环。

1
2
3
4
5
示例 1:

输入:head = [3,2,0,-4], pos = 1
输出:true
解释:链表中有一个环,其尾部连接到第二个节点。

1
2
3
4
5
示例 2:

输入:head = [1,2], pos = 0
输出:true
解释:链表中有一个环,其尾部连接到第一个节点。

1
2
3
4
5
示例 3:

输入:head = [1], pos = -1
输出:false
解释:链表中没有环。

进阶:

你能用O(1)(即,常量)内存解决此问题吗?


解题思路

快慢指针

快指针一次走2步,慢指针一次走1步,如果两个指针相遇,说明链表有环。


Python代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None

class Solution(object):
def hasCycle(self, head):
"""
:type head: ListNode
:rtype: bool
"""
slow = head
fast = head

while fast and fast.next:
slow = slow.next
fast = fast.next.next
if slow == fast:
return True

return False
----------------本文结束感谢您的阅读----------------
坚持原创技术分享,您的支持将鼓励我继续创作!
0%