題目描述
給定乙個鍊錶,返回迴圈開始的節點。如果沒有迴圈節點,return null,並且要求在不占用額外空間的情況下解決
解題思路
(1)快慢節點確定是否會相交,若迴圈,則快慢指標會相交,若不迴圈,則快指標會指向空
(2)若相交,記錄慢指標位置,並讓快指標回到頭結點,兩指標再一起走,第乙個相交點,為迴圈開始的節點
**示例
class solution
listnode *p = head;
listnode *q = head;
//快指標一次走兩步,可能當前為空,或next為空,都算走到最後乙個節點,否則迴圈體內p走兩步會出錯
while (p && p->next)
return p;}};
c 鍊錶之 快慢指標 查詢迴圈節點
參考 上面分析了 根據這張圖 推倒出 數學公式。剛接觸 不能一下弄明白。下面結合上面文章的分析。仔細推倒一下 一般設定 快指標 速度是 慢指標的2倍。及 快指標每次遍歷兩個指標,慢指標每次遍歷1個指標。假設上圖 快慢指標 在e點相遇,那 相遇點離迴圈節點d 之間距離是x.頭結點a 離迴圈節點d 距離...
迴圈鍊錶插入節點
由於迴圈鍊錶的迴圈特性,所以頭節點和尾節點可以被當成一般節點。所以,我們可以在寫迴圈鍊錶節點插入的函式中,可以呼叫自定義的函式 如下 void insert node list t insert node,list t prev node,list t next node 當我們寫插入函式的時候可以...
鍊錶 怎麼判斷鍊錶有環,怎麼找環節點
定義快慢指標fast和slow,fast每次前進兩步,slow每次前進一步 當fast和slow在到達鏈尾之前相遇的話,就證明有環 類似於在操場上跑步跑的慢的被快的套圈但總會遇到 fast和slow相遇之後,fast不動,slow回到最初的起點,然後一步一步的等在再次相遇,這時候相遇地點就是環結點 ...