判斷鍊錶中的環的入口節點

2021-09-11 06:27:33 字數 636 閱讀 9350

有乙個單向鍊錶,判斷鍊錶中是否有環,如果有,返回環的入口節點。

功能測試:鍊錶中包含或者不包含環,鍊錶有多個或者乙個節點

特殊值測試:頭指標為空

#include#includeusing namespace std;

struct listnode

};listnode* hasring(listnode* head)

return nullptr;

}listnode* findentry(listnode* head)

listnode* pnode1=head;

while(num--)

pnode1=pnode1->next;

listnode* pnode2=head;

while(pnode1!=pnode2)

return pnode1;

}

可以分為兩步考慮,第一步,判斷鍊錶中有沒有環,建立兩個指標,指標1每次向前走乙個節點,指標2每次向前走兩個節點,當指標2走到尾節點等於空時,鍊錶中沒有環,或者當兩個指標相遇時,鍊錶中有環。然後計算出環的節點數目num,讓乙個指標pnode1從頭結點走num個節點,然後pnode2指標從頭結點和pnode1一起向前走,當兩者相遇則找到環的入口節點。

鍊錶中的環入口節點

public class 鍊錶中的環入口節點 計算環的長度 int lengthofcycle 1 listnode curnode meetnode while curnode.next meetnode 找出入口節點 利用快慢指標,前者先行lengthofcycle個節點,然後兩者同時前進當fa...

判斷鍊錶是否有環,入口節點以及環的大小(C )

這篇部落格對上述問題有詳細的解釋 判斷鍊錶中是否有環 有關單鏈表中環的問題 這裡只做c 的乙個 實現,主要包含構建環形鍊錶,判斷是否有環以及環的大小。include include using namespace std struct node node creatcircularlist newn...

判斷鍊錶是否有環及環的入口

1.如何判斷是否有環?如果有兩個頭結點指標,乙個走的快,乙個走的慢,那麼若干步以後,快的指標總會超過慢的指標一圈。2.如何計算環的長度?第一次相遇 超一圈 時開始計數,第二次相遇時停止計數。3.如何判斷環的入口點 碰撞點p到連線點的距離 頭指標到連線點的距離,因此,分別從碰撞點 頭指標開始走,相遇的...