判断单链表是否有环
判断单链表是否有环
使用快慢指针的方式判断链表十分有环。
public ListNode detectCycle(ListNode head) {
if(head == null) return null;
//定义快慢指针
ListNode fast_P = head, slow_P = head;
//只要后面有路,两指针就继续追逐
while(fast_P.next != null && fast_P.next.next != null ){
//移动
fast_P = fast_P.next.next;
slow_P = slow_P.next;
//判断是否相遇
if(fast_P == slow_P){
//相遇证明有环,有环就需要找环开始的位置
//存在关系:相遇点到环的第一个节点距离==链表节点到环的第一个节点距离
ListNode p = head;
while(slow_P != p) {
slow_P=slow_P.next;
p=p.next;
}
return p;
}
}
//没有环,快指针肯定先遇到null,跳出循环,返回null即可
return null;
}

浙公网安备 33010602011771号