面試題23 鍊錶中環的入口節點

2022-03-03 21:36:51 字數 784 閱讀 2801

考察鍊錶的操作,找到單向鍊錶中環的入口節點

c++版
#include #include using namespace std;

// 定義鍊錶

struct listnode

};// 在鍊錶存在環的前提下找到一快一慢兩個指標相遇的節點

listnode* meetingnode(listnode* phead)

return nullptr;

}// 找入口節點

listnode* entrynodeofloop(listnode* phead)

// 先移動pnode1,次數為環中節點的數目

pnode1 = phead;

for(int i = 0; i < nodesinloop; i++)

listnode* pnode2 = phead;

while(pnode1 != pnode2)

return pnode1;

}// 更簡單的乙個辦法,只有乙個函式解決問題

listnode* hascycle(listnode* phead)

// 沒有環則返回

if(fast == nullptr && fast->next == nullptr)

return nullptr;

slow = phead;

while(slow != fast)

return fast;

}int main()

面試題23 鍊錶中環的入口節點

面試題23 鍊錶中環的入口節點 題目 給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出 null 思路 定義快慢兩個指標,相遇後 環中相匯點 將快指標指向 phead 然後一起走,每次往後挪一位,相遇的節點即為所求。詳細分析 相遇即 p1 p2 時,p2 所經過節點數為 2x,p1 ...

面試題23 鍊錶中環的入口節點

一 判斷該鍊錶是否有環 使用雙指標,前指標走得快,後指標走得慢,如果有環,前指標能夠在後面追上慢指標 include struct listnode listnode meetingnode listnode phead return nullptr 二 找到環的入口 計算得到環的節點數 將指標1前...

面試題23 鍊錶中環的入口節點

給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。考察點 鍊錶 魯棒性 分析問題。思路 1.首先判斷鍊錶中有環,用兩個指標標記頭結點,乙個指標增速為1,乙個指標增速為2,如果慢指標可以追上快指標 環存在。2.其次,就是求得環中存在多少個節點,用迴圈判斷,回到原始節點就統計出來...