劍指 Offer兩個鍊錶的第乙個公共節點

2021-10-10 14:43:18 字數 1614 閱讀 8520

給定兩個(單向)鍊錶,判定它們是否相交並返回交點。請注意相交的定義基於節點的引用,而不是基於節點的值。換句話說,如果乙個鍊錶的第k個節點與另乙個鍊錶的第j個節點是同一節點(引用完全相同),則這兩個鍊錶相交。

如果說引用相同,那麼next值也相同,所以兩個相交鍊錶是這個樣子的

//然後訪問鍊錶b的結點,判斷集合中是否包含鍊錶b的結點,如果包含就直接返回

while

(headb != null)

//如果集合set不包含鍊錶b的任何乙個結點,說明他們沒有交點,直接返回null

return null;

}2,先統計兩個鍊錶的長度

還可以先統計兩個鍊錶的長度,如果兩個鍊錶的長度不一樣,就讓鍊錶長的先走,直到兩個鍊錶長度一樣,這個時候兩個鍊錶再同時每次往後移一步,看節點是否一樣,如果有相等的,說明這個相等的節點就是兩鍊錶的交點,否則如果走完了還沒有找到相等的節點,說明他們沒有交點,直接返回null即可,來畫個圖看一下。

}//然後開始比較,如果他倆不相等就一直往下走

while

(heada != headb)

//走到最後,最終會有兩種可能,一種是heada為空,

//也就是說他們倆不相交。還有一種可能就是heada

//不為空,也就是說heada就是他們的交點

return heada;

}//統計鍊錶的長度

private

intlength

(listnode node)

return length;

}如果有相交的結點d的話,每條鏈的頭結點先走完自己的鍊錶長度,然後回頭走另外的一條鍊錶,那麼兩結點一定為相交於d點,因為這時每個頭結點走的距離是一樣的,都是 ad + bd + dc,而他們每次又都是前進1,所以距離相同,速度又相同,固然一定會在相同的時間走到相同的結點上,即d點,當然,如果沒有相交,那麼就為null,每個指標都走了鍊錶a和鍊錶b,長度相同,所以就為null。

public

class

solution

else

if(curb==null)

else

}return cura;

}}

劍指offer 兩個鍊錶第乙個公共結點

題目描述 輸入兩個鍊錶,找出它們的第乙個公共結點。解題思路 用兩重迴圈,對第乙個鍊錶的每乙個結點都進行第二個鍊錶所有結點的遍歷,若發現結點相等,則將結點返回 public listnode findfirstcommonnode listnode phead1,listnode phead2 phe...

劍指offer 兩個鍊錶的第乙個公共結點(鍊錶)

輸入兩個鍊錶,找出它們的第乙個公共結點。公共節點指的是節點的指標相同 節點本身相同 而不是節點的內容相同。如果考慮暴力的方法,對於鍊錶1的每個元素,去遍歷鍊錶2,找出第乙個公共節點,這樣時間複雜度為o mn 計算開銷大 m,n分別為兩個鍊錶的長度 考慮具有公共節點的鍊錶的特徵 如果兩個鍊錶有公共節點...

劍指offer 兩個鍊錶的第乙個公共節點

題目延伸 程式設計之美中的求兩個節點是否相交 將兩個節點串在一起,若有節點,串在一起的節點就會出現環,利用一二不長不等,兩個節點在環中必然相遇。本題描述 輸入兩個鍊錶,找出它們的第乙個公共結點。分析 乙個簡單的方法是 首先遍歷兩個鍊錶得到它們的長度,就能知道哪個鍊錶比較長,以及長的鍊錶比短的鍊錶多幾...