一條鍊錶如何判斷是否有環?若是有環那怎麼找到鍊錶環的入口?
思路: 用快慢兩個指標分別從煉表頭開始,慢指標一次走乙個節點,快指標一次走兩個節點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
; }
};
classsolution
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出發...