// 尋找兩個鍊錶的第乙個公共節點.cpp : defines the entry point for the console application.
///*
1.最簡單的方法就是先順序訪問其中乙個鍊錶,在每訪問乙個節點時,都對另外乙個鍊錶進行遍歷,看節點是否相等
直到找到乙個相等的節點位置,如果鍊錶長度分別是m,n 則時間複雜度為o(mn)
2.我們可以知道如果兩個鍊錶有公共節點,那麼該公共節點之後的所有節點都是兩個鍊錶所共有的,所以長度一定也是
相等的,如果兩個鍊錶的總長度是相等的,那麼我們對兩個鍊錶進行遍歷,則一定同時到達第乙個公共節點。但是鍊錶
的長度實際上不一定相同,所以我們只需要計算出兩個鍊錶的長度之差n,然後讓長的那個鍊錶先移動n步,短的鍊錶再
開始向後遍歷,這樣他們一定同時到達第乙個公共節點,我們只需要在向後移動的時候比較兩個鍊錶的節點是否相等就
可以獲得第乙個公共節點。時間複雜度是o(m+n)
*/#include "stdafx.h"
struct listnode
;unsigned int listlength(listnode* phead)
return nlength;
}listnode* findfirstcommonnode( listnode *phead1, listnode *phead2)
// move on the longer list
for(int i = 0; i < nlengthdif; ++ i)
plistheadlong = plistheadlong->m_pnext;
// move on both lists
while((plistheadlong != null) &&
(plistheadshort != null) &&
(plistheadlong != plistheadshort))
// get the first common node in two lists
listnode *pfisrtcommonnode = null;
if(plistheadlong == plistheadshort)
pfisrtcommonnode = plistheadlong;
return pfisrtcommonnode;
}
兩個鍊錶的第乙個公共節點(鍊錶相交)
題目描述 輸入兩個鍊錶,找出它們的第乙個公共結點 鍊錶只要存在公共節點,那麼公共節點後面所有的節點都是公共的。因此,對於這種一般兩種思路 思路一 將兩個鍊錶分別壓入兩個棧中,然後從棧頂不斷比較。知道遇到第乙個不相等的節點,然後公共節點就是該節點的下乙個節點 思路二 如果能將鍊錶尾部對齊,那麼就可以兩...
兩個鍊錶第乙個公共節點
先讓長的鍊錶的指標先走長的之差的步數,兩個再一起走,如果相遇就是第乙個公共節點 如果沒交點,就都走到空 struct listnode class solution while pl2 null 復位指標到頭節點 pl1 phead1 pl2 phead2 int dif len 0 if len1...
兩個鍊錶的第乙個公共結點
思路 獲取兩個鍊錶的長度,求的長度差n,讓長鍊表先遍歷n次,然後長鍊表和短鍊錶同時遍歷,當長鍊錶和短鍊錶相等時,即為第一公共結點。o m1 m2 public class findfirstcomnode int len1 getnodelength root1 int len2 getnodele...