题目
以下2种题解,时间均是\(O(1)\)
哈希表
额外空间: \(O(n)\)
1 | /** |
双指针法
额外空间:\(O(1)\)
1 | /** |
总结
双指针法
需要注意,初始化
fastP
,slowP
快慢指针的时候的判别条件。1
2
3if (!head || !head->next) return false;
ListNode* slowP = head;
ListNode* fastP = head->next;判断是否有环 <=> 判断是否指针指向
nullptr
处. 判断指针是否指向nullptr
处的常数项系数更小。注意此时的循环/条件语句的判别条件。
1
2
3
4
5while (slowP != fastP)
{
// CUZ fastP 快些,所以fastP/ fastP->next为null之后,就说明 无环了
if (!fastP || !fastP->next) return false;
}