檢測環的常用方法為快慢指標方法。如果快慢指標相遇,則說明存在環,本文中將返回相遇結點的數值;如果快指標的next為空時,則說明不存在環。本文中慢指標一次移動乙個結點,快指標一次移動2個結點。
(1)
//帶環鍊錶的檢測 快慢指標
pnode iscircle(pnode head)
else if(null==head->next->next)
else
else
slow=slow->next;
fast=fast->next->next;
}}}}
從上述**中,我們可以看出,在迴圈前,讓快指標先移動2個結點至第2個結點(資料為10的結點),經過推導,快慢指標是在資料為7的結點相遇。
int _tmain(int argc, _tchar* argv)
;pnode p=createlist_circle(a,9,3);
pnode temp=iscircle(p);
if(null!=temp)
else
return 0;
}
程式結果為:
(2)上述方法相當於快指標比慢指標快上2步。如果快慢指標同時出發,則**如下:
//帶環鍊錶的檢測2 快慢指標
pnode iscircle1(pnode head)
else if(null==head->next->next)
else
} }
if(true==flag)
else
}
則執行結果為:
相遇點是不同的。
單鏈表中環的檢測
常見的基本思路類似雙人賽跑 a比b跑得快,如果不存在環的話,當他們沿著同樣的道路跑步,a將永遠碰不到b 但如果是在操場跑的話,a則遲早會遇見b 實現 定義兩個指標,fast和slow,fast每次移動兩個結點,slow每次移動乙個結點,如果fast和slow相遇,則說明存在環,如果fast next...
單鏈表中環的檢測(JAVA)
參考單鏈表反轉中的主類 假設乙個單鏈表是環形鍊錶,那麼該鍊錶的元素總數可分為兩部分 size m n 其中m是直線部分,n是環形部分 假想這是乙個跑道,從直線跑道為起點,之後進入環形跑道,然後一直繞著環形跑道跑 現在有兩個人一起從起點出發,速度不一致,快的速度為v,慢的速度為w,有v w 0 假設兩...
檢測單鏈表是否有環
參考 判斷乙個單鏈表是否有環及環的鏈結點 給定乙個單鏈表,只給出頭指標h 1 如何判斷是否存在環?2 如何知道環的長度?3 如何找出環的連線點在 4 帶環鍊錶的長度是多少?解法 1 對於問題1,使用追趕的方法,設定兩個指標slow fast,從頭指標開始,每次分別前進1步 2步。如存在環,則兩者相遇...