判斷兩鏈表是否交叉主要有如下三種方法:遍歷
一、 最簡單的方法就是先順序訪問其中一個鏈表,在每訪問一個節點時,都對另一個鏈表進行遍歷,看節點是否相等,直到找到一個相等的節點位置,方法
若是鏈表長度分別是m,n 則時間複雜度爲O(mn)鏈表
二、咱們能夠知道若是兩個鏈表有公共節點,那麼該公共節點以後的全部節點都是兩個鏈表所共有的,因此長度必定也是相等的,若是兩個鏈表的總長度是相等的,那麼咱們對兩個鏈表進行遍歷,則必定同時到達第一個公共節點。可是鏈表的長度實際上不必定相同,因此咱們只須要計算出兩個鏈表的長度之差n,而後讓長的那個鏈表先移動n步,短的鏈表再開始向後遍歷,這樣他們必定同時到達第一個公共節點,咱們只須要在向後移動的時候比較兩個鏈表的節點是否相等就能夠得到第一個公共節點。時間複雜度是O(m+n)移動
三、咱們能夠將其中一個鏈表的首尾相連,而後判斷另外一個鏈表是否含環。若是含環,則兩鏈表交叉;不然,不交叉。時間複雜度是O(max[m,n])時間