前兩篇討論的前提都是鍊錶是無環的,但是如果鍊錶有環呢?
顯然,如果鍊錶有環,那麼之前的尋找鍊錶尾結點的函式將陷入死迴圈,之前的演算法也將崩掉。 所以
對於鍊錶相交的問題,首先要判斷的是鍊錶是否有環。
題目給出倆個單向鍊錶的頭指標,比如 h1,h2,判斷這倆個鍊錶是否相交
解題步驟
判斷兩個【無環】鍊錶是否相交
找到兩個【無環】鍊錶的相交結點
判斷鍊錶是否帶環
判斷兩個【有環】鍊錶是否相交
找到兩個【有環】鍊錶的相交結點
思路
用兩個指標,乙個指標步長為1,乙個指標步長為2,若最後相遇,則鍊錶有環
有環 返回兩指標相遇位置
無環 返回null
判斷鍊錶是否帶環的函式:
/**判斷鍊錶是否有環
node 煉表頭指標
方法:用兩個指標,乙個指標步長為1,乙個指標步長為2,若最後相遇,則鍊錶有環
有環 返回兩指標相遇位置
無環 返回null
*/listnode * ifcircle(listnode * node)
};listnode * l1;
/**判斷鍊錶是否有環
node 煉表頭指標
方法:用兩個指標,乙個指標步長為1,乙個指標步長為2,若最後相遇,則鍊錶有環
有環 返回兩指標相遇位置
無環 返回null
*/listnode * ifcircle(listnode * node)
void main()
{ //l1=createlist();
l1=createcirclelist();
l1=ifcircle(l1);
if(l1!=null)
cout<<"兩指標相遇結點為" 編寫乙個程式,找到兩個單鏈表相交的起始節點。例如,下面的兩個鍊錶 a a1 a2 c1 c2 c3 b b1 b2 b3 在節點 c1 開始相交。注意 如果兩個鍊錶沒有交點,返回 null.在返回結果後,兩個鍊錶仍須保持原有的結構。可假定整個鍊錶結構中沒有迴圈。程式盡量滿足 o n 時間複雜度,且僅... 一 問題描述 判斷兩個鍊錶是否相交,若相交返回交點,否則返回空。這裡假設鍊錶不帶環 由上圖我們可以得出鍊錶相交的兩個結論 1.兩鍊錶相交,第乙個相同的結點為鍊錶的交點 2.兩鍊錶相交,從交點向後的所有結點都相同 合二為一 二 解決思路 方法一 直觀法 思路 依次判斷第乙個鍊錶中的每個結點是否在第二個... 給定乙個有限鍊錶,判斷鍊錶中是否有環。所謂的環 不一定是是最後的指向第乙個節點,也可能是指向中間的節點 快慢指標 判斷是否是迴圈鍊錶 include include typedef struct linkedlist linkedlist linkedlist newnode int num 建立乙...Leetcode(鍊錶)相交鍊錶 c
鏈表面試題 判斷鍊錶是否相交(c語言)
C語言 快慢指標 判斷是否是環形的鍊錶