在计算机领域,算法是一个永恒的主题。任何计算机使用者都希望计算机能运行得更快一些或是能解决更大规模的问题。从现在开始,跟随我每天刷一道算法题吧!
在此之前,我们刷的几乎都是有关数组操作的算法题。在接下来的几天里,我们将学习 “双指针技巧”,它可以帮助我们解决许多与数组相关的问题。
双指针专题 第七天。
LeetCode #141 环形链表
题目
给定一个链表,判断链表中是否有环。
为了表示给定链表中的环,我们使用整数 pos
来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos
是 -1
,则在该链表中没有环。
示例1:
输入:head = [3,2,0,-4], pos = 1 |
示例2:
输入:head = [1,2], pos = 0 |
示例3:
输入:head = [1], pos = -1 |
解题思路
思路 :
这次既不是数组也不是字符串,这次将接触一下链表这种数据类型。对于链表,因为我们只能在一个方向上遍历链表。所以左右双指针在链表中无法工作,然而,快慢指针技巧,是非常有用的。
我们需要一个慢指针和快指针对链表进行遍历。在一条有尽头的链表中,快指针始终会首先到达链表尽头;而当在一条循环无尽头的链表中,快指针会不停绕圈,始终会与慢指针相遇。
双指针代码:
/** |