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走两个单位时需要作空指针判断
