给定一个链表,如果链表中存在环,则返回到链表中环的起始节点,如果没有环,返回 null。
样例 1:
输入:null,no cycle
输出:no cycle
解释:
链表为空,所以没有环存在。
样例 2:
输入:-21->10->4->5,tail connects to node index 1
输出:10
解释:
最后一个节点 5 指向下标为 1 的节点,也就是 10,所以环的入口为 10。
考点:
题解:
算法面试高频题班免费试听,攻略还有更多大厂常考题型。
public class Solution {
public ListNode detectCycle(ListNode head) {
if (head == null || head.next==null) {
return null;
}
ListNode fast, slow;
fast = head.next; //快指针
slow = head; //慢指针
while (fast != slow) { //快慢指针相遇
if(fast==null || fast.next==null)
return null;
fast = fast.next.next;
slow = slow.next;
}
while (head != slow.next) { //同时移动 head 和慢指针
head = head.next;
slow = slow.next;
}
return head; //两指针相遇处即为环的入口
}
}