思路:快慢指標,慢指標每次移動一步,快指標每次移動兩步,如果存在環,那麼兩個指標一定會在環內相遇
把第二個煉表頭節點的頭接到第乙個鍊錶尾部,然後就轉換成判斷單鏈表是否有環的問題了
當快慢指標相遇後,將乙個指標固定在相遇點,另乙個指標回到鍊錶起始位置,然後兩指標每次都移動乙個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...