Given a linked list, return the node where the cycle begins. If there is no cycle, return null.
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.
Note: Do not modify the linked list.
Example 1:
Input: head = [3,2,0,-4], pos = 1
Output: tail connects to node index 1
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: tail connects to node index 0
Explanation: There is a cycle in the linked list, where tail connects to the first node.
题目大意为 先判断是否有环 并且找到环的初始节点。
通过设置快慢指针 p每次走一步,q每次都两步。如果p和q相遇。这说明 存在环
class Solution {
public:
ListNode *detectCycle(ListNode *head) {
if(head==NULL||head->next==NULL)
return 0;
ListNode *p=head,*q=head;
while(p&&q)
{
p=p->next;
q=q->next;
if(q)
q=q->next;
else
return 0;
if(p==q)
{
p=head;
while(p!=q)
{
p=p->next;
q=q->next;
}
return p;
}
}
return 0;
}
};