華為面試題 怎麼判斷鍊錶中是否有環?????

2021-08-26 21:32:38 字數 824 閱讀 2061

定義兩個指標,一前一後,同時移動,前面的移動比後面的慢,如果是迴圈的則後面的肯定會追上前面的

思路就是弄兩個指標,開始指向不同的鍊錶不同的位置,然後1個指標移動間隔是1,乙個指標移動間隔是2,如果快的能追上慢的,那說明就有環了。就如何兩個人繞圈跑步,速度不一樣,如果速度快的能追上慢的,那說明跑道是環型的。

bool circleinlist(link* phead)

if (phead->next = = phead)//自環

link *ptemp1 = phead;

link *ptemp = phead->next;

while (ptemp != ptemp1 && ptemp != null && ptemp->next != null)

if (ptemp == ptemp1)

return false; }

思路就是弄兩個指標,開始指向不同的鍊錶不同的位置,然後1個指標移動間隔是1,乙個指標移動間隔是2,如果快的能追上慢的,那說明就有環了。就如何兩個人繞圈跑步,速度不一樣,如果速度快的能追上慢的,那說明跑道是環型的。

bool circleinlist(link* phead)

if (phead->next = = phead)//自環

link *ptemp1 = phead;

link *ptemp = phead->next;

while (ptemp != ptemp1 && ptemp != null && ptemp->next != null)

if (ptemp == ptemp1)

return false; }

騰訊面試題 判斷鍊錶是否有環

目錄前言 1.快慢指標 2.雜湊表法 參考資料點這裡。用兩個指標指向煉表頭,每次迴圈,快指標往前兩步,慢指標往前一步 在迴圈過程中,如果快指標等於慢指標 相遇 則表示鍊錶有環 否則不存在環。如下 public boolean findbeginloop listnode head return fa...

面試題 判斷鍊錶是否相交

今天看了 july的一篇經典文章 程式設計師程式設計藝術 第九章 閒話鍊錶追趕問題 因為現在一直複習資料結構有關鍊錶的演算法,順便總結下,學習下july大牛的判斷鍊錶是否相交。出處 題目 給出兩個單向鍊錶的頭指標,判斷是否相交。下面是july文章上面的解法 分析 這是來自程式設計之美上的微軟亞院的一...

面試題之 鍊錶是否有環

leetcode面試題 以上面這個鍊錶為例,鍊錶 現了環路,但是如何檢測出該鍊錶是否含有環路呢?使用兩個指標,乙個快指標和乙個慢指標,使用快指標追趕慢指標,當兩個指標相遇,那麼證明該鍊錶中存在環路。追趕理論 當兩個人在乙個環形跑道上跑步時,只要其中乙個人的速度比另乙個人的速度快,那麼只要給足夠多的時...