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

2021-09-27 07:55:35 字數 1271 閱讀 7532

就是劍指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...