鍊錶常見問題

2021-10-22 17:14:05 字數 519 閱讀 6547

思路:快慢指標,慢指標每次移動一步,快指標每次移動兩步,如果存在環,那麼兩個指標一定會在環內相遇

把第二個煉表頭節點的頭接到第乙個鍊錶尾部,然後就轉換成判斷單鏈表是否有環的問題了

當快慢指標相遇後,將乙個指標固定在相遇點,另乙個指標回到鍊錶起始位置,然後兩指標每次都移動乙個node,當兩指標再次相遇時,相遇點即為環入口

上述證明過程如下:

* 設鏈起點到環入口點間的距離為x,環入口點到問題1中fast與low重合點的距離為y,又設在fast與low重合時fast已繞環n周(n>0),且此時low移動總長度為s,則fast移動總長度為2s,環的長度為r。則

* s + nr = 2s,n>0 ①

* s = x + y ②

* 由①式得 s = nr

* 代入②式得

* nr

鍊錶常見問題 2

這個問題大家在資料結構中是很常見的,這個問題說簡單也簡單,可是想不通的時候還是有點難度的,領扣對這道題的描述有以下幾種情況 領扣給的鍊錶節點定義方式 definition for singly linked list.class listnode 方法 public boolean hascycle...

鍊錶常見問題(上)

void slistprinttailtohead slistnode phead printf d cur data tail cur 遞迴實現 void slistprinttailtoheadr slistnode phead void slistdelnontailnode slistnod...

鍊錶常見問題 有序合併

兩個有序鍊錶,合併後仍然有序。分析 容易想到的就是找頭,也就是判斷下兩個煉表頭結點val小的。然後採用尾部插入 從head插就覆蓋了 遍歷兩個鍊錶,每次取小的,知道有個鍊錶為空退出。在判斷有無剩餘非空的鍊錶,追加到尾部。author bohu83 public class mergerlist li...