求兩個單鏈表的第乙個公共節點。
分析:兩個鍊錶的第乙個公共節點之後的部分相同(完全重合)
1.當兩個單鏈表a、b長度相等時,對兩個單鏈表同時進行遍歷,若節點不相等,則指標分別指向下乙個節點;當a鍊錶的指標等於b鍊錶的指標時,該節點即為第乙個公共節點。
2.當兩個單鏈表a、b長度不相等時,假設b為兩個鍊錶中較長的乙個,其長度為m,a鍊錶的長度為n,則m>n;則b鍊錶的前m-n個節點的不可能存在公共節點,對其前m-n個節點進行遍歷,使其後半部分的長度和a鍊錶的長度想的,其長度為n,此時兩個鍊錶長度相等,採用步驟1中的思路進行同時遍歷。
時間複雜度為o(m+n),即為o(m);
**如下:
struct listnode};
class
solution
return n;
}//求第乙個公共節點
listnode*
firstcommonnode
(listnode* heada,listnode* headb)
//將b前blength-alength個節點空轉
for(
int i=
0;i!=blength-alength;i++
)//兩個個指標同時遍歷
while
(heada)
return
null
;}
兩個單鏈表的第乙個公共節點
題目 求兩個單鏈表的第乙個公共子節點。思路 我們可以先遍歷兩個單鏈表得到長度,然後求得兩個鍊錶長度的差值,然後讓長的那個鍊錶先走到差值長度位置,然後兩個鍊錶再同時遍歷,直到找到第乙個公共節點。struct listnode int getlistlength listnode head return...
兩個單鏈表的第乙個公共節點
輸入兩個鍊錶,找出它們的第乙個公共結點。注意因為傳入資料是鍊錶,所以錯誤測試資料的提示是用其他方式顯示的,保證傳入資料是正確的 由於單鏈表中節點只能有乙個next指標,所以兩個單鏈表相交,只能是y型的形狀,兩者的尾部重疊,第乙個重疊的節點就是我們要找的第乙個公共節點。假設鍊錶1的長度為a c,鍊錶2...
兩個單鏈表第乙個公共結點
基本概念 兩個鍊錶是單鏈表,如果兩個鍊錶有公共節點,那麼這兩個鍊錶從某一節點開始,它們都指向同乙個節點,之後它們所有的節點都是重合的,不可能再出現分叉。所以拓撲形狀看起來是y型。演算法思想 首先遍歷兩個鍊錶得到它們的長度,就能知道哪個鍊錶比較長,以及長的鍊錶比短的鍊錶多幾個節點。在第二次遍歷的時候,...