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