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

2021-09-24 23:31:39 字數 642 閱讀 6197

目錄前言

1.快慢指標

2.雜湊表法 

參考資料點這裡。 

用兩個指標指向煉表頭,每次迴圈,快指標往前兩步,慢指標往前一步;在迴圈過程中,如果快指標等於慢指標(相遇),則表示鍊錶有環;否則不存在環。**如下:

public boolean findbeginloop(listnode head) 

return false;

}

如何計算環的長度?

在相遇點,兩個指標繼續乙個走一步,乙個走兩步,當再次相遇時,走一步的指標所走過的節點數記為環的長度。

如何計算環離起點的長度?

參考資料點這裡。

遍歷鍊錶所有的節點,並在雜湊表中儲存每個結點的引用(或記憶體位址)。如果當前節點為空結點null,表示我們已經檢測到鍊錶的末尾的下乙個節點。那麼表示我們已經完成了鍊錶的遍歷,並且此鍊錶不是環形鍊錶。如果當前結點的引用已經存在過雜湊表中,那麼即可立馬返回true(表示此煉表為環形鍊錶)。

public boolean hascycle(listnode head)  else 

p = p.next;

}return false;

}

面試題之 鍊錶是否有環

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

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

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

演算法面試題 如何判斷鍊錶有環

有乙個單向鍊錶,鏈中可能有 環 如何用程式判斷呢?方法1 最低效 最常想到的是 首先從頭結點開始遍歷整個鍊錶,每遍歷乙個,就和之前遍歷過的比較,這相當於每次遍歷了兩遍,無疑是擴大了鍊錶 遍歷 帶來的劣勢,其時間複雜度為o n 2 由於沒有額外的儲存空間,故空間複雜度為o 1 這也太低效了吧。方法2 ...