就是劍指offer面試題52,兩個鍊錶的第乙個公共節點
所謂公共節點大概就是這樣了,因為乙個鍊錶只能有乙個後繼
如果兩個節點恰好在末尾,如果兩個鍊錶的節點在第乙個位置,那就是一條鍊錶了
對兩個鍊錶從頭到尾進行遍歷都沒有相同的位置,那麼肯定就沒有公共的節點
看書上說,也可以用兩個輔助棧來實現:
把第乙個鍊錶放進棧裡
把第二個鍊錶放進棧裡
然後再彈出(也就是從兩個鍊錶的結尾開始彈,如果兩條鍊錶相交,則兩鍊錶至少有乙個節點相同),直到節點不一致,那麼就是到了分叉口。
這裡我沒有用兩個輔助棧的做法,而是從兩個鍊錶的頭開始,讓長的鍊錶的指標先跑(跑的距離就是長短鍊錶的長度差值),這樣兩鍊錶同時進行遍歷,如果有相同節點則是第乙個節點
**:
public class main
/*** length1 : head1的長度
* length2 : head2的長度
* flag : 長度的鍊錶比短的鍊錶的差值
*/int length1=0;
int length2=0;
for(node phead=head1;phead!=null;phead=phead.next)
for(node phead=head2;phead!=null;phead=phead.next)
int flag=length1>length2?length1-length2:length2-length1;
node p1=head1,p2=head2;
//讓短的那個鍊錶先走flag個長度
for(int i=0;ilength2)else if(length2>length1)
}//這下兩條鍊錶兩個指標初始的位置相同,可以進行遍歷
while((p1!=null)&&(p1!=p2)&&(p2!=null))
//相等的時候就是交點了
return p1;
}}class node
兩個鍊錶第乙個公共節點
先讓長的鍊錶的指標先走長的之差的步數,兩個再一起走,如果相遇就是第乙個公共節點 如果沒交點,就都走到空 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...