LeetCode:Linked List Cycle II
2015-03-04 21:46
302 查看
class Solution {
public:
ListNode *detectCycle(ListNode *head) {
//判断是否有环,并找到环的入口。算法思想:设起点距离环入口结点个数为a,环中包含结点个数为r,相遇时距离环入口结点个数是x,则根据快、慢指针的速度比,得出nr+x+a=(x+a)*2,(n大于1,因为单链表是同向的)最终得到a=nr-x;变换一下公式看看就发现一个很有意思的地方:a=(n-1)r+r-x;r-x为环中x结点处距离达到环入口的结点个数即若此时一个指针从起点出发,一个指针在X处出发,速度相同,将会同时走完这段距离,即到达入口处
if(!head||!head->next)
return NULL;
if(head->next==head)
return head;
ListNode *p,*q;
p=head;
q=head;
while(q&&q->next)
{
p=p->next;
q=q->next->next;
if(p==q)
break;
}
if(p!=q)//不存在环
return NULL;
else{//存在环
p=head;
while(p!=q)
{
p=p->next;
q=q->next;
}
}
return p;
}
};
相关文章推荐
- LeetCode:Linked List Cycle II
- LeetCode:Linked List Cycle II
- LeetCode | Linked List Cycle II
- LeetCode | Linked List Cycle II
- LeetCode之Linked List Cycle II
- leetcode - Linked List Cycle II
- [Leetcode 141 & 142, medium] Linked List Cycle (I and II)
- [LeetCode] - Linked List Cycle II
- [leetcode]Linked List Cycle II
- LeetCode: Linked List Cycle II
- [算法][LeetCode]Linked List Cycle & Linked List Cycle II——单链表中的环
- [LeetCode] Linked List Cycle II
- Leetcode: Linked List Cycle II
- [LeetCode]Linked List Cycle II
- [leetcode]Linked List Cycle II
- Leetcode Linked List Cycle II
- leetcode: Linked List Cycle II
- Leetcode: Linked List Cycle II
- LeetCode - Linked List Cycle II
- leetcode Linked List Cycle II