提交记录
执行结果:
题目分析:
- pos是给官方代码生成环形链表的
- 生成后的链表即代码模版中的head
- 你只需要判断这个链表是否环形
- 注意理解题意
解题思路:
- 可以使用快慢指针法, 分别定义 fast 和 slow指针,从头结点出发,fast指针每次移动两个节点,slow指针每次移动一个节点,如果 fast 和 slow指针在途中相遇 ,说明这个链表有环。
- 为什么fast 走两个节点,slow走一个节点,有环的话,一定会在环内相遇呢,而不是永远的错开呢?
- 首先第一点: fast指针一定先进入环中,如果fast 指针和slow指针相遇的话,一定是在环中相遇,这是毋庸置疑的。
- 那么来看一下,为什么fast指针和slow指针一定会相遇呢?
- 可以画一个环,然后让 fast指针在任意一个节点开始追赶slow指针。
语言:C++
class Solution {
public:
bool hasCycle(ListNode *head) {
ListNode*fast=head;
ListNode*slow=head;
while(fast!=NULL&&fast->next!=NULL){
fast=fast->next->next;
slow=slow->next;
if(fast==slow) return true;
}
return false;
}
};
细节提升
1.推荐做升级版题目
升级版题目:142. 环形链表 II
解题思路:https://editor.csdn.net/md/?articleId=124281637