1. 程式人生 > >龜兔算法:判斷鏈表是否有環、確定環的入口

龜兔算法:判斷鏈表是否有環、確定環的入口

判斷鏈表是否有環 正整數 表頭 ali inf lib 節點 bubuko 算法

1.使用快慢指針,fast=fast.next.nextslow=slow.next,若鏈表存在環,那麽fastslow一定會相遇,相遇的節點在環內,接下來需要確定環的入口。

2.如圖,假設L= 鏈表總長 - 環的長度cxslow走過的長度 - L,指針在圓點相遇,slow走了L+xfast走了L+kc+x(k為正整數),快指針是慢指針的2倍,則 L=kc - x。讓快指針回到鏈表頭部,slow在相遇的位置,兩指針同時開始移動,每次移動一步,那麽當fast到達環的入口時,slow走過的距離為kc - x,也就是在相遇點繞環k次,回到環的入口,所以,指針必定在環的入口處相遇

技術分享圖片

龜兔算法:判斷鏈表是否有環、確定環的入口