鍊錶判斷是否有環,如有,找入環節點

2022-05-03 11:12:16 字數 800 閱讀 1917

一條鍊錶如何判斷是否有環?若是有環那怎麼找到鍊錶環的入口?

思路: 用快慢兩個指標分別從煉表頭開始,慢指標一次走乙個節點,快指標一次走兩個節點next -> next,這樣如果有環那快指標務必會跑到慢指標後面,隨即兩者之間的距離一次會縮小一步,最終相遇。若是未相遇且快指標的 next 為 null,則說明鍊錶無環。

如果快慢指標相遇,說明有環,假設起點到入環節點的距離為l,入環節點到相遇節點的距離為x,環的周長為l,根據速度可推出下面關係見

假設n=1,也就是當快指標再走第二圈的時候和慢指標相遇,他們的關係為l=h - x

也就是說,如果這個時候有乙個指標temp從起點開始走,慢指標low 從相遇的地方開始走,當temp指標與low相遇的位置就是入環節點

struct

listnode

};//

快慢指標

class

solution

return

true

; }

};//

雜湊表class

solution

return

false

; }

};

判斷是否有環+尋找入環節點

class

solution

return

p; }

}return

null;}};

判斷鍊錶是否有環,找到入環節點 python實現

用快慢指標的方法。時間複雜度o n 空間複雜度o 1 設定p1為慢指標,p2為快指標,兩者初始時都指向鍊錶的頭結點 慢指標p1每次前進1步,快指標p2每次前進2步。如果鍊錶存在環,則快指標p2肯定先進入環,慢指標p1後進入環,兩個指標必定會相遇。如果不存在環,則快指標會先行到達鍊錶的尾部變為none...

如何判斷鍊錶有環以及求入環節點

如何判斷單鏈表有環,並找出環的入口?時間o n 空間o 1 這個面試題還是蠻有趣的,當時只想出了第一問,第二問實在巧妙。如圖這個單鏈表,藍色的部分是環。對於如何判斷鍊錶有環,可以從起點發出兩個指標,乙個一次一步,另乙個一次兩步,如果兩個指標相遇,那麼這個單鏈表就有環。設綠色的地方是指標相遇點。對於第...

鍊錶是否有環找出入環節點位置

利用快慢指標方法判斷鍊錶是否存在環,並記錄兩指標相遇位置。快慢指標方法 將兩指標分別放在煉表頭 x 和相遇位置 z 並改為相同速度推進,則兩指標在環開始位置相遇 y 如圖所示。證明過程 x,y,z分別為鍊錶起始位置,環開始位置和兩指標相遇位置,由快指標速度的慢指標速度的2倍。快指標與慢指標均從x出發...