224

问答题 224 /376

如何判断单链表是否是循环链表

参考答案

参考回答:

时间复杂度:O(n)

空间复杂度:O(1)

两个指针,一个每次走一步,一个每次走两步,如果有环,两者会相遇。相遇后,让一个指针从头结点再次出发,两个指针每次都走一步,直到相遇点即为环入口。

public class Solution {
public ListNode EntryNodeOfLoop(ListNode pHead){
ListNode left = pHead;
ListNode right = pHead;
while(right!=null && right.next!=null){
left = left.next;
right = right.next.next;
if(left==right) break;
}
if(right==null || right.next == null){
return null;
}
left = pHead;
while(left!=right){
right = right.next;
left = left.next;
}
return left;
}
}