1. 如果鍊錶中有環,可以通過快慢指標,最後快慢指標肯定會相會於環中的某個節點;
2. 從這個相會的節點開始,當再次遇到該節點,即可統計環中有節點數 n;
3. 設定兩個指標p,p1,p從頭先走 n 步,p1在頭部,然後兩個指標同時 走,當兩指標相遇時,相遇的節點即是環的入口。
c++ **
struct listnode
};listnode* getmeetnode(listnode* phead)
return null;
}listnode* entrynodeofloop(listnode* phead)
// 用兩個指標,乙個指標先走環內節點個數的步數,另乙個節點在煉表頭
// 當兩個節點相遇時,此時的節點即是環的入口節點
p = phead;
while(n--)
p = p->next;
listnode* p1 = phead;
while(p1 != p)
return p;
}
劍指offer 鍊錶中環的入口
問題描述 給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。假設x為環前面的路程 紅色路程 a為環入口到相遇點的路程 綠色路程,假設順時針走 c為環的長度 藍色路程 設定快慢指標fast和slow,快指標的速度是慢指標的兩倍 當快慢指標相遇的時候 此時慢指標走的路程為sslo...
劍指Offer 鍊錶中環的入口結點
第一步 先找到環中的乙個點 第二步 確定環中有幾個元素,比如n個 第三步 讓第乙個指標先走n步,第二個指標再從頭走,兩指標相遇即為入口結點 class solution def entrynodeofloop self,phead write code here meetingnode self.m...
劍指offer 鍊錶中環的入口結點
假設x為環前面的路程 黑色路程 a為環入口到相遇點的路程 藍色路程,假設順時針走 c為環的長度 藍色 橙色路程 當快慢指標相遇的時候 此時慢指標走的路程為sslow x m c a 快指標走的路程為sfast x n c a 2 sslow sfast 2 x m c a x n c a 從而可以推...