62.找出鍊錶的第乙個公共結點。
題目:兩個單向鍊錶,找出它們的第乙個公共結點
思路:1.暴力法 但時間複雜度太高 o(n*m)
2.如果兩個鍊錶有公共節點,則從該公共節點起,後面的節點均為公共的,即這兩個鍊錶在第乙個公共節點交叉,然後形成乙個y字型,因為兩個鍊錶長度不一定一樣,所以可以先求得他們的長度n與m,然後得到長度差:math.abs(n-m),然後先對較長鍊錶先行遍歷n-m個節點,從第n-m+1個節點開始對這兩個鍊錶遍歷,然後找出第乙個相同的即可 (網上抄別人的)
3. 位圖法 對兩個鍊錶分別建立bitmap,然後對這兩個bitmap進行與運算即可,則得到的結果中最左邊的那個1即代表第乙個相同元素,然後對該值每次右移一位,直到等於1為止,右移的次數即為第乙個公共元素,時間複雜度為o(n+m)
1package
com.rui.microsoft;23
//62.找出鍊錶的第乙個公共結點。4//
題目:兩個單向鍊錶,找出它們的第乙個公共結點
5public
class
test62_findcommonnodefromlinkedlists
2526
//位運演算法
27//
時間複雜度o(n+m) => 遍歷鍊錶構造bitmap
28void
find(node headx, node heady)
3940
while(null !=y)
4445
system.out.println(integer.tobinarystring(bitx));
46system.out.println(integer.tobinarystring(bity));
4748
int inter = bitx &bity;
49 string interstr =integer.tobinarystring(inter);
50system.out.println(interstr);
5152
int radix = 0;
53while(inter > 1)
57system.out.println(radix);58}
5960
static
class
node 66}
67 }
找出兩個鍊錶的第乙個公共節點
輸入兩個鍊錶,找出它們的第乙個公共節點。鍊錶定義如下 struct listnode 方法一 暴力查詢 在第乙個鍊錶上順序遍歷每個節點,每遍歷到乙個節點的時候,在第二個鍊錶上順序遍歷每個節點。如果第二個鍊錶上的節點和第乙個鍊錶上的節點一樣,就說明兩個鍊錶在節點上重合,於是就找到了公共的節點。但這種方...
找出鍊錶的第乙個公共結點
題目 兩個單鏈表,找出它們的第乙個公共結點。鍊錶的結點定義為 struct listnode 答 include stdafx.h include include using namespace std struct listnode 構造鍊錶 void createlist listnode ph...
鍊錶的第乙個公共節點python
思路 假設兩個鍊錶是單鏈表。那麼公共節點之後的鍊錶一定是重合的,也就是說,兩個鍊錶的有一節尾巴是一樣的。解決上述問題的方法就是,先求出兩個鍊錶的長度,分別是len1和len2,如果len1len2 while len1 len2 phead1 phead1.next len1 1 elif len1...