兩個鍊錶的第乙個公共節點 NC66

2021-10-10 11:01:51 字數 694 閱讀 7390

假設兩個鍊錶公共長度為c,不公共的長度分別為a、b。 則兩個鍊錶長度分別為a+c,b+c。 設兩個指標,讓第乙個鍊錶走完之後,跳到第二個鍊錶開始走,共a+c+x1距離;同理第二個鍊錶走完後調到第乙個鍊錶開始走,走b+c+x2距離。

那麼兩個指標相遇時,由 a+c+x1 = b+c+x2,距離不為負,得x1=b,x2=a,所以最後兩個指標走的距離都是a+b+c,剛好在第乙個公共點相遇。

時間複雜度 : o(m+n)

空間複雜度 : o(1)

//雙指標

var getintersectionnode = function(heada, headb)

return node1; //這裡寫node2結果也一樣

};

第乙個while迴圈遍歷第乙個鍊錶,將其所有節點放入 map 中

第二個while遍歷第二個鍊錶,用 has 判斷這個節點值是否存在第乙個鍊錶中。

//hashmap法

var getintersectionnode2 = function(heada, headb)

while(headb)

return null;

};

兩個鍊錶第乙個公共節點

先讓長的鍊錶的指標先走長的之差的步數,兩個再一起走,如果相遇就是第乙個公共節點 如果沒交點,就都走到空 struct listnode class solution while pl2 null 復位指標到頭節點 pl1 phead1 pl2 phead2 int dif len 0 if len1...

兩個鍊錶的第乙個公共節點

輸入兩個鍊錶,找出它們的第乙個公共的節點。碰到這種題的時候千萬不要用挨個遍歷的方法,時間複雜度高 對於兩個有相同節點的鍊錶的形狀一定是y。而不是x。然後還可能乙個鍊錶長乙個鍊錶短,我們可以求出差值,然後讓長鍊表先走差值的長度,然後在挨個比較就可以了。這樣時間複雜度就小很多了 劍指offer 名企面試...

兩個鍊錶的第乙個公共節點

題目 輸入兩個鍊錶,找出它們的第乙個公共結點。思路 先遍歷兩個鍊錶得到它們的長度,求出長鍊錶比短鍊錶多幾個 第二次遍歷,在長鍊表上先走若干步,接著同時在兩個鍊錶上遍歷,找到的第乙個相同的結點就是它們的第乙個公共結點。public class listnode public listnode find...