判断方法,创建两个指针p和q指针,p指针每次向前前进一个,q每次向前前进两个。如果存在p和q一起指向同一个结点,则证明有环。
反之如果的下一个结点为空,则无环。
如果有环,则p到环的结点时,q一定领先p的距离为b(小于环的长度n),此时p和q相遇假设需要前进y次,则q相比p多走了距离y,能够相遇可以假设q比p多走了m圈,则y+b=mn,假设m=1,则y+b=n。y+b因为p到环结点时,q已经领先p距离b。
若有环,寻找环节点:分别从碰撞点和链表头结点出发,相遇的点即为环开始结点。
证明:如果有环,则p到环的结点时,q一定领先p的距离为b(小于环的长度n),实际领先距离可以表示为xn+b,指针p1和q1分别从链表开始结点和碰撞点出发,从开始结点出发需要走xn+b到环节点,从碰撞点出发为:n-b+xn+b=(x+1)n,q1正好位于环的开始结点,两指针在环开始结点相遇。