鍊錶迴圈節點問題

2021-08-21 05:19:44 字數 422 閱讀 3576

題目描述

給定乙個鍊錶,返回迴圈開始的節點。如果沒有迴圈節點,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回到最初的起點,然後一步一步的等在再次相遇,這時候相遇地點就是環結點 ...