有乙個單向鍊錶,判斷鍊錶中是否有環,如果有,返回環的入口節點。
功能測試:鍊錶中包含或者不包含環,鍊錶有多個或者乙個節點
特殊值測試:頭指標為空
#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到連線點的距離 頭指標到連線點的距離,因此,分別從碰撞點 頭指標開始走,相遇的...