判断链表是否有环(NC4/考察次数Top15/难度简单)
Posted 码农指南
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了判断链表是否有环(NC4/考察次数Top15/难度简单)相关的知识,希望对你有一定的参考价值。
描述:
判断给定的链表中是否有环。如果有环则返回true,否则返回false。
(题目来自牛客网)
用C++实现如下
/**
* struct ListNode { //定义单链表结构,包含val和ListNode *
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
bool hasCycle(ListNode *head) {
//思路,传入的是链表的头结点,返回的是bool型变量
//思路:一快一慢两个指针,如果快指针等于空(由于快指针每次走两步,所以需要判断快指针和快指针的
//下一个节点是否为空,确保p->next->next有意义),则表示没有环,否则就一直跑,两个肯定会相遇
if(head==nullptr || head->next==nullptr)
{
return false;
}
ListNode* p = head;
ListNode* q = head;
while(p!=NULL && p->next!=NULL){ //需要判断快指针和快指针的下一个节点是否为空,确保p->next->next有意义
p = p->next->next;
q = q->next;
if(p==q){ //相遇了
return true;
}
}
return false; //遇到空,则返回false;
}
};
纯手撕代码,如果觉得内容不错麻烦点个赞,后面陆续配上Top100算法题通俗易懂的讲解视频,可以花两个月时间完全掌握,进大厂不是梦,转行狗亲测!
以上是关于判断链表是否有环(NC4/考察次数Top15/难度简单)的主要内容,如果未能解决你的问题,请参考以下文章
判断二叉树是否对称(NC16/考察次数Top61/难度简单)