#include <iostream>
#include <vector>
using namespace std;
struct ListNode {
int val;
ListNode* next;
ListNode(int x): val(x), next(nullptr) {}
};
/*
双指针法: fast and slow
1.快指针fast和慢指针slow同时指向链表头部;
2.遍历整个链表:快指针fast每次移动2步,慢指针slow每次移动1步;
3.当快慢指针可以相遇时,可以证明链表有环否则无环;
*/
class Solution {
public:
bool hasCycle(ListNode* head) {
ListNode* fast = head;
ListNode* slow = head;
while(fast != nullptr && fast->next != nullptr) {
fast = fast->next->next;
slow = slow->next;
if(fast == slow) return true;
}
return false;
}
};
【LeetCode-141 | 判断链表是否有环】
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 题目 给定一个链表,判断链表中是否有环。 解析 题目本身不困难在LeetCode中也是简单等级。简单的方法是使用H...
- 1、原题 给定一个链表,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链...
- 题目描述 给定一个链表,判断链表中是否有环。 进阶: 解题思路 无环链表,最后一个节点为nil,有环链表可以无限循...
- 判断链表是否存在环 使用双指针,一个指针每次移动一个节点,一个指针每次移动两个节点,如果存在环,那么这两个指针一定...
- 两种实现方式: 哈希缓存法 思路:单链表中的环是指链表末尾的节点的 next 指针不为 NULL ,而是指向了链表...