LCR 021
题目:LCR 021
解法一:快慢指针
判断循环是否存在,一般用快慢指针算法解决。
fast
每次走两个单位,slow
每次走一个单位。当二者在环内相遇时,再创建一个指针 ptr
指向 head
,和 slow
同时走,每次走一个单位,slow
和 ptr
指针相遇位置,便是入环点
public ListNode detectCycle(ListNode head) {ListNode slow = head, fast = head, ptr = head;while (fast != null) {slow = slow.next;//空指针判断if (fast.next == null) return null;else fast = fast.next.next;if (fast == slow) {while (ptr != slow) {ptr = ptr.next;slow = slow.next;}return ptr;}}return null;}
}
注意:fast
每次走两个单位,当已经指向最后一个元素时,再连续走两个单位就会报空指针异常,因此fast
走两个单位时需要作空指针判断