题目1:给定一个链表,判断它是否有环。
例如:给出 -21->10->4->5, tail connects to node index 1,返回 true。
挑战:不要使用额外指针。
思路:使用两个指针,初始时两个指针均指向链表头位置,然后一个指针每次走两步,一个指针每次走一步,如果在循环过程中遇到两个指针相等,则说明有循环返回true。如果出现一个指针无法继续往下走,则退出循环返回false。
思路的证明:因为fast先进入环,在slow进入之后,如果把slow看作在前面,fast在后面每次循环都向slow靠近1,所以一定会相遇,而不会出现fast直接跳过slow的情况。
九章题解:
public class Solution{
public Boolean hasCycle(ListNode head){
if(head == null || head.next == null){