資料結構與演算法——迭代開啟url問題(連結串列)
一個url指向的頁面裡面有另一個url,最終有一個url指向之前出現過的url或空,這兩種情形都定義為null。這樣構成一個單連結串列。給兩條這樣單連結串列,判斷裡面是否存在同樣的url。url以億級計,資源不足以hash。
本題可以抽象為有環和無環情況下的連結串列交叉問題:
情況一:兩條單連結串列均無環
最簡單的一種情況,由於兩條連結串列如果交叉,他們的尾節點必然相等(Y字歸併),所以只需要判斷他們的尾節點是否相等即可。
情況二:兩條單連結串列均有環
這種情況只需要拆開一條環路(注意需要儲存被設定成null的節點),然後判斷另一個單連結串列是否仍然存在環路,如果存在,說明無交叉,反之,則有交叉的情況。
情況三:兩條單連結串列,一條有環路,一條無環路
這種情況顯然他們是不可能有交叉的
附:如何判斷一條單連結串列是否存在環路,以及找出環路的入口
快慢指標:在表頭設定兩個指標fast與slow,fast指標與slow指標同時向前移動,但是fast每次移動2個節點,slow每次移動1個節點,若fast指向null或者fast==slow時停止,這時如果fast指向null,則說明沒有環路,若fast==slow則說明有環路。
找環路入口:當fast==slow時,將fast重新指向表頭。slow原地不動。然後fast和slow在同時以每次一個節點的速度向前移動,當他們再次重合時,就是環路入口。證明如下:
1.證明fast和slow肯定會重合
在slow和fast第一次相遇的時候,假定slow走了n步驟,環路的入口是在p步的時候經過的,那麼有slow走的路徑: p+c = n; c為p1和p2相交點,距離環路入口的距離;fast走的路徑: p+c+k*L = 2*n; L為環路的周長,k是整數。顯然,如果從p+c點開始,p1再走n步驟的話,還可以回到p+c這個點同時p2從頭開始走的話,經過n步,也會達到p+c這點。
2.fast和slow在p+c點會重合,顯然他們從環的入口點就開始重合
相關文章
- 資料結構與演算法-連結串列資料結構演算法
- 資料結構與演算法——連結串列 Linked List(單連結串列、雙向連結串列、單向環形連結串列-Josephu 問題)資料結構演算法
- 資料結構連結串列各種問題資料結構
- 資料結構與演算法分析——連結串列資料結構演算法
- JavaScript資料結構與演算法(連結串列)JavaScript資料結構演算法
- [ JavaScript ] 資料結構與演算法 —— 連結串列JavaScript資料結構演算法
- 資料結構與演算法-連結串列(下)資料結構演算法
- 資料結構與演算法-連結串列(上)資料結構演算法
- javascript資料結構與演算法--連結串列JavaScript資料結構演算法
- 資料結構與演算法--迴圈連結串列資料結構演算法
- 資料結構與演算法JavaScript (三) :連結串列資料結構演算法JavaScript
- 資料結構和演算法面試題系列—連結串列資料結構演算法面試題
- 資料結構與演算法學習-連結串列上資料結構演算法
- 資料結構與演算法學習-連結串列下資料結構演算法
- 【資料結構與演算法】——連結串列(Linked List)資料結構演算法
- 03 Javascript資料結構與演算法 之 連結串列JavaScript資料結構演算法
- 資料結構與演算法 | 線性表 —— 連結串列資料結構演算法
- javaScript的資料結構與演算法(二)——連結串列JavaScript資料結構演算法
- 資料結構連結串列筆試題資料結構筆試
- 資料結構與演算法整理總結---陣列,連結串列資料結構演算法陣列
- Redis資料結構—連結串列與字典Redis資料結構
- 資料結構之連結串列與陣列(2):單向連結串列上的簡單操作問題資料結構陣列
- 資料結構-連結串列資料結構
- 資料結構 - 連結串列資料結構
- 連結串列-資料結構資料結構
- 資料結構--連結串列資料結構
- 資料結構—連結串列資料結構
- Redis資料結構—連結串列與字典的結構Redis資料結構
- 資料結構與演算法-線性表-單連結串列資料結構演算法
- 【資料結構與演算法】通俗易懂說連結串列資料結構演算法
- python演算法與資料結構-單連結串列(38)Python演算法資料結構
- 資料結構與演算法 | 迴文連結串列檢測資料結構演算法
- 資料結構與演算法(二)佇列、棧、連結串列資料結構演算法佇列
- 資料結構-單連結串列、雙連結串列資料結構
- Go資料結構與力扣—連結串列Go資料結構力扣
- 演算法與資料結構-連結串列((linked-list)-Java實現單向連結串列演算法資料結構Java
- JavaScript資料結構--連結串列JavaScript資料結構
- 資料結構之「連結串列」資料結構