一、题目描述
给定一个链表,判断链表中是否有环。存在环返回 true ,否则返回 false。
二、理解题意
可以理解为“追击”问题,如果存在环,跑得快的一定能追上跑得慢的。
快慢指针法:
当我们在遍历链表的时候,我们设计两个指针,分别是快指针和慢指针,块指针每次走2步,而慢指针每次走1步,这样的话在当我们两个指针在链表中,如果会第二次相遇则说明这里面的链表是环形链表。
三、Choose 数据结构及算法思维选择
-
数据结构:两个变量,只需要额外定义slow和fast两个变量
-
算法思维:遍历、快慢指针,fast、slow两个变量就是快慢指针
四、Code 最优解思路及编码实现
- 定义快慢两个指针:
slow=head; fast=head.next; - 遍历链表:
快指针步长为2:fast=fast.next.next;
慢指针步长为1:slow=slow.next; - 当且仅当快慢指针重合,有环,返回true
- 快指针为null,或其next指向null,没有环,返回false,