您的位置:首页 > 其它

(leetcode)Linked List Cycle II

2014-08-19 22:00 369 查看
Linked List Cycle II

题目描述:

Given a linked list, return the node where the cycle begins. If there is no cycle, return
null
.

题目分析:

在上一篇博文中是直接判断链表是否有环路,而这个题目加深难度,要求找环路开始节点。其实,在上一篇算法的基础上,先找到快指针与慢指针相遇的节点,然后一个指针指向这个节点,这个指针与头指针同步向后一步一步移动,直到两指针相遇,那么相遇的节点就是环路开始的节点。

public ListNode detectCycle(ListNode head) {
if(head==null||head.next==null)
return null;
ListNode p1=head;
ListNode p2=head;
while(p1!=null&&p2!=null&&p2.next!=null){
p1=p1.next;
p2=p2.next.next;
if(p1==p2)
break;
}
if(p2!=null&&p2.next!=null){
while(head!=p1){
head=head.next;
p1=p1.next;
}
return p1;
}
return null;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: