尋找兩個單鏈表的公共節點演算法

2021-10-11 11:41:13 字數 647 閱讀 9201

兩個鍊錶有公共節點,表示從某個節點之後所有的節點都相同(共享節點),即兩個鍊錶一起呈現y型

暴力遍歷

將兩個鍊錶倒置,然後遍歷兩個新鍊錶,即相當於從原來的鍊錶的尾部開始向前遍歷,直到兩個鍊錶分叉的地方結束,只是此時遍歷出來的是倒序的節點

最普遍的解法:先把較長的鍊錶多餘長度的部分遍歷完,然後再從兩個鍊錶相同長度的節點位置開始同時遍歷直到共享的位置(如下圖)

來自部落格c語言 尋找兩個單鏈表的公共節點實現與原理

用c語言實現第三種方法:

/*

引數: 帶頭節點的兩個鍊錶的頭指標,以及兩個鍊錶的長度

*/void

findcommon

(plist head1,

int len1, plist head2,

int len2)

//從cur開始,兩個鍊錶遍歷的長度相同,或者用while迴圈直到cur!=null

for(

int i =

0; i < min;

++i)

return;}

else

}}

C語言 尋找兩個單鏈表的公共節點實現與原理

實現思想 實現 有的同學在第一次看到這個題目的時候,以為公共節點,就是兩個鍊錶中節點的資料相等如下圖 很大一部分同學認為紅色框框裡面的就是相同節點,其實不然,正確的是這樣子的 兩個鍊錶指向相同位址的節點才是公共節點 因為兩個鍊錶的形狀為y型,所以最後公共節點的位址是一樣的,我們可以找到兩個鍊錶的最後...

兩個單鏈表的第乙個公共節點

題目 求兩個單鏈表的第乙個公共子節點。思路 我們可以先遍歷兩個單鏈表得到長度,然後求得兩個鍊錶長度的差值,然後讓長的那個鍊錶先走到差值長度位置,然後兩個鍊錶再同時遍歷,直到找到第乙個公共節點。struct listnode int getlistlength listnode head return...

兩個單鏈表的第乙個公共節點

輸入兩個鍊錶,找出它們的第乙個公共結點。注意因為傳入資料是鍊錶,所以錯誤測試資料的提示是用其他方式顯示的,保證傳入資料是正確的 由於單鏈表中節點只能有乙個next指標,所以兩個單鏈表相交,只能是y型的形狀,兩者的尾部重疊,第乙個重疊的節點就是我們要找的第乙個公共節點。假設鍊錶1的長度為a c,鍊錶2...