带环链表
描述
笔记
数据
评测
给定一个链表,判断它是否有环。
样例
给出 -21->10->4->5, tail connects to node index 1,返回 true
挑战
标签
相关题目
以下代码是以他人代码为参考
/**
* Definition of ListNode
* class ListNode {
* public:
* int val;
* ListNode *next;
* ListNode(int val) {
* this->val = val;
* this->next = NULL;
* }
* }
*/
class Solution {
public:
/**
* @param head: The first node of linked list.
* @return: True if it has a cycle, or false
*/
bool hasCycle(ListNode *head) {
// write your code here
ListNode *p=head,*q=head;
while(q&&q->next){//point1注意这句条件
p=p->next;
q=q->next->next;
if(p==q) break;//point2注意为什么不直接在这句return
}
if (!q||!q->next ) return false;//point3注意这句条件
return true;
}
};
point1:这句好理解,因为q走在p之前
point2和point3是我的疑问,我尝试改了,没报错,但不知道有没有隐忧:
/**
* Definition of ListNode
* class ListNode {
* public:
* int val;
* ListNode *next;
* ListNode(int val) {
* this->val = val;
* this->next = NULL;
* }
* }
*/
class Solution {
public:
/**
* @param head: The first node of linked list.
* @return: True if it has a cycle, or false
*/
bool hasCycle(ListNode *head) {
// write your code here
ListNode *p=head,*q=head;
if(!head||!head->next) return false;//point4为什么还要!head->next
while(q&&q->next){
p=p->next;
q=q->next->next;
if(p==q) return true;
}
return false;
}
};
point4:因为可能有这种情况:0->null