圖1是乙個鍊錶環,此煉表有8個結點,分別為a-h。假設起點為g,快指標fast和慢指標slow都從g出發,慢指標一次遍歷乙個結點,快指標一次遍歷兩個結點,無論他們走多少圈,快慢指標fast和slow相遇的點總是g點,這個毋庸置疑,即slow和fast相遇的第乙個結點為g點。
再看圖2,將圖1的g點到a點的結點扯平得到圖2,那麼同樣的slow和fast還是從g點出發,按照圖1的規則,slow和fast相遇的第乙個點還是g點,因為當slow走到g』點的時候 fast已經走了兩圈,第一圈是從g走到g』,第二圈是從g』到g』 ,這就是slow和fast指標相遇的全過程,此時應該很明了了,g』到a的節點數和g到a的節點數相同,因為從圖1和圖2的角度看,就相當於將圖1的g點到a點扯平了,變成圖2了,,,,
此時只需要兩個slow指標,乙個slow1從g點出發,乙個slow2從g』點出發,slow1和slow2相遇的地方就是入口a點。。。。
是不是超級無敵很清晰明了簡單 hhhh **的話網上應該有很多。。。
快慢指標判斷鍊錶是否有環
關於鍊錶是否有環,其實是一系列問題,主要包括以下幾個 使用快慢指標fast和slow,fast每次走兩步,slow每次走一步,如果有環,肯定會相遇,如果沒有,則指標fast遇到null退出。追及相遇問題。在環上相遇後,記錄第一次相遇點為pos,之後指標slow繼續每次走1步,fast每次走2步。在下...
資料結構與演算法 通俗易懂說鍊錶
鍊錶 linked list 由一些節點組成,物理儲存非連續的線性表。其中每個節點都會儲存下個節點的指標,由於實際儲存空間不連續,對鍊錶插入節點,刪除節點可以達到o 1 的複雜度,但是對乙個節點的訪問需要o n 的時間。鍊錶有單向鍊錶,雙向鍊錶。結構體表示為 單向鍊錶節點資料結構 插入節點操作 單向...
雙指標(快慢指標)判斷鍊錶是否有環
單鏈表的特點是每個節點知道下乙個節點 如果用乙個指標來判斷是否有環,當沒有環時,指標一直會指到鍊錶的為即指到null,但是當有環時,指標將陷入死迴圈,因為環形鍊錶中沒有null指標作為尾部節點 while head null head head.next return false 找到一種經典解法 ...