判断链表中是否有环
题目描述
题号:NC4
判断给定的链表中是否有环。如果有环则返回true,否则返回false。
你能给出空间复杂度的解法么?
题目分析
- 使用快慢指针,一个指针一次向后移动一步,另一个指针一次向后移动两部
- 若快指针的当前结点或下一个结点为nullptr,说明链表无环
- 若快指针等于慢指针说明链表有环
代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
bool hasCycle(ListNode *head) {
if (!head || !(head->next)) return false;
ListNode* p1 = head;
ListNode* p2 = head->next->next;
while (p2 && p2->next) {
if (p1 == p2) return true;
p1 = p1->next;
p2 = p2->next->next;
}
return false;
}
};