您的位置:首页 > 其它

Linked List Cycle II

2014-01-06 11:19 281 查看
Given a linked list, return the node where the cycle begins. If there is no cycle, return
null
.

Follow up:
Can you solve it without using extra space?

/**
* Definition for singly-linked list.
* class ListNode {
*     int val;
*     ListNode next;
*     ListNode(int x) {
*         val = x;
*         next = null;
*     }
* }
*/
public class Solution {
public ListNode detectCycle(ListNode head) {
// IMPORTANT: Please reset any member data you declared, as
// the same Solution instance will be reused for each test case.
if (head==null) {
return null;
}
ListNode pFast = head;
ListNode pSlow = head;
boolean first = true;
while (pFast != null) {
if (pSlow == pFast && !first) {
//从相遇点找入口
ListNode p = head;
while (p!=null) {
if(p==pFast) {
return p;
}
p = p.next;
pFast = pFast.next;
}
}
pSlow = pSlow.next;
if (pFast.next !=null) {
pFast = pFast.next.next;
} else {
pFast = null;
}
first = false;
}
return null;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: