问:怎样判断一个链表是否有环
答:可以利用两个指针(快慢指针)。从链表头出发,指针1每次走一步,指针2每次走二步。若指针1与指针2相遇,则说明链表有环。
问:怎样判断环连接点在哪里?
答:设链表头到环连接点的距离为a, 环的长度为r,链表总长为L ,环节点到相遇点的距离为x ,快指针走的距离为2s,慢指针走的距离为s。
则 2s = s + nr (n为圈数) --> s = nr
因为 a+x = s --> a + x = nr --> a + x = (n-1)r + r --> a + x = (n-1)r + L-a ----------> a = (n-1)r + (L-a-x)
可得: a = L-a-x
即从链表头与相遇点同时出发两指针,相遇时的位置便是环连接点。