如何判斷兩個鍊錶相交

2022-07-08 22:24:10 字數 723 閱讀 5794

方法一:

最笨的方法,遍歷鍊錶1,每遍歷乙個節點,判斷這個節點是否在鍊錶2中

for node1 in l1

for node2 in l2

if node1 == node2

return true

時間複雜度比較高,o(l1.length*l2.length)

方法二:

萬能的hash,對於節點位址進行hash到不同的桶中,首先將l1的所有節點的位址hash到不同的桶中,然後對l2的每個節點,將它的節點位址hash到不同的桶中,一旦發現兩個節點hash到相同的桶中,說明節點位址有相同,則相交。

時間複雜度:o(l1.length+l2.length)

方案三:

如果兩個鍊錶中的相交,必然尾節點肯定是一樣的,只要兩個鍊錶都遍歷到尾部,即可,那麼只要比較尾節點是否一致即可

時間複雜度:o(l1.length+l2.length)

方案4:

將乙個鍊錶首尾相接,判斷鍊錶是否有環

如何求出相交節點?

方案一:

好比hash法,第乙個同時hash到相同的桶的節點就是相交節點

方案二:

求環入口節點

方案三:

判斷相交的過程中要分別遍歷兩個鍊錶,同時記下各自的長度。然後再遍歷一次:長鍊表節點先從頭節點出發前進(lengthmax-lenghmin)步,之後兩個鍊錶同時前進,每次一步,相遇的第乙個節點即為兩個鍊錶相交的第乙個節點。

每日一題 判斷兩個鍊錶相交

判斷兩個單鏈表是否相交 並返回第乙個相交的元素。思路 可以想到,如果兩個鍊錶相交,那麼它肯定是尾部相連,首部分開,就像朝左側臥的 y 形。因此,能夠想到兩種思路,一種是從後往前遍歷鍊錶,直到兩個鍊錶的某個結點元素值不相等,那這個結點的前乙個結點就是第乙個相交的結點。另外一種思路就是從前往後遍歷,首先...

如何判斷兩個鍊錶相交及找到第乙個相交點

我們學乙個演算法,一定是為了用吧,所謂 學以致用 嗎?那麼判斷兩個鍊錶是否相交有什麼用呢?這是因為一旦兩個鍊錶出現相交的情況,就可能發生這樣的情況,程式釋放了鍊錶la的所有節點,這樣就導致了另外乙個與之有相交節點的鍊錶lb中的節點也釋放了,而lb的使用者,可能並不知道事實的真相,這會帶來很大的麻煩。...

如何判斷兩個鍊錶相交及找到第乙個相交點

我們學乙個演算法,一定是為了用吧,所謂 學以致用 嗎?那麼判斷兩個鍊錶是否相交有什麼用呢?這是因為一旦兩個鍊錶出現相交的情況,就可能發生這樣的情況,程式釋放了鍊錶la的所有節點,這樣就導致了另外乙個與之有相交節點的鍊錶lb中的節點也釋放了,而lb的使用者,可能並不知道事實的真相,這會帶來很大的麻煩。...