Given a linked list, determine if it has a cycle in it.
To represent a cycle in the given linked list, we use an integer pos which represents the position (0-indexed) in the linked list where tail connects to. If pos is -1, then there is no cycle in the linked list.
Example 1:
Input: head = [3,2,0,-4], pos = 1
Output: true
Explanation: There is a cycle in the linked list, where tail connects to the second node.
Example 2:
Input: head = [1,2], pos = 0
Output: true
Explanation: There is a cycle in the linked list, where tail connects to the first node.
Example 3:
Input: head = [1], pos = -1
Output: false
Explanation: There is no cycle in the linked list.
这道题让我们判断一个链表是否有环,可以通过快慢指针来判断,这里要注意的就是循环的终止条件,因为快指针每次走两步,因此要判断快指针是否为空以及快指针的下一个节点是否为空。
C++
bool hasCycle(ListNode *head) {
if(head == nullptr)
return false;
ListNode* slow = head;
ListNode* fast = slow->next;
while(fast != nullptr&&fast->next != nullptr)
{
if(fast == slow)
return true;
fast = fast->next->next;
slow = slow->next;
}
return false;
}