輸入兩個鍊錶,找出它們的第乙個公共結點。
若存在這樣公共節點,那個兩個鍊錶的結構應該是乙個「y」字形的,最後交於一條鍊錶。
法一:從乙個鍊錶的節點開始遍歷,對遍歷到的節點再遍歷另乙個鍊錶,直到相等;
法二:兩個鍊錶都從最後乙個節點開始遍歷,找到最後乙個相同的節點即為所求。(用棧儲存來實現單鏈表不能倒序查詢的缺點)
法三:遍歷每個鍊錶求出其長度。把較長的鍊錶先遍歷超出的長度,然後同時遍歷,直到遇到第乙個相同的節點即為所求。
本**採用法三思路解題:
/*
public class listnode
}*/public class solution
list = phead2;
while(list != null)
int dis = math.abs(len1 - len2);
if(len1 > len2)
}else
}listnode ans = null;
while(phead1 != phead2)
ans = phead1;
return ans;
}}
如有錯誤或不合理的地方,敬請指正~
加油!!
兩個鍊錶第乙個公共節點
先讓長的鍊錶的指標先走長的之差的步數,兩個再一起走,如果相遇就是第乙個公共節點 如果沒交點,就都走到空 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...