找出鍊錶的第乙個公共結點

2021-09-06 05:52:20 字數 1409 閱讀 3928

題目:兩個單鏈表,找出它們的第乙個公共結點。

鍊錶的結點定義為:

struct

listnode

;

答:

#include "

stdafx.h

"#include

#include

using

namespace

std;

struct

listnode;//

構造鍊錶

void createlist(listnode *&phead, fstream &fin, listnode *pnodecommon)

else

fin>>data;

}if (null !=pnode)

}//求鍊錶長度

int listlength(listnode *phead)

listnode *pnode =phead;

int length = 0

;

while (null!=pnode)

return

length;}//

找出鍊錶的第乙個公共結點

listnode* findfirstcommonnode(listnode *pfirsthead, listnode *psecondhead)

int separate = lengthlong -lengthshort;

for (int i = 0; i < separate && null != plongnode; i++) //

2、讓長度長的鍊錶先遍歷兩個鍊錶的長度的差值

while (null != pshortnode && null != plongnode && (pshortnode != plongnode)) //

3、第乙個相等的鍊錶結點就是第乙個公共結點

if (pshortnode ==plongnode)

return

null;

}int _tmain(int argc, _tchar*argv)

else

cout

<

return0;

}

執行介面如下:

建造長鍊表用到的listlong.txt為:

55589

2044

332084

0

建造短鍊表用到的listshort.txt為:

7

1639

0

建造公共鍊錶用到的listcommon.txt為:

555450

7799

0

鍊錶的第乙個公共結點

輸入兩個鍊錶,找出它們的第乙個公共結點。注意因為傳入資料是鍊錶,所以錯誤測試資料的提示是用其他方式顯示的,保證傳入資料是正確的 先遍歷兩個鍊錶得到兩個鍊錶的長度,設為k,較長的的鍊錶先走k步。struct listnode class solution while p2 int len len1 l...

找出鍊錶的第乙個公共節點

62.找出鍊錶的第乙個公共結點。題目 兩個單向鍊錶,找出它們的第乙個公共結點 思路 1.暴力法 但時間複雜度太高 o n m 2.如果兩個鍊錶有公共節點,則從該公共節點起,後面的節點均為公共的,即這兩個鍊錶在第乙個公共節點交叉,然後形成乙個y字型,因為兩個鍊錶長度不一定一樣,所以可以先求得他們的長度...

微軟100題(62)找出鍊錶的第乙個公共結點

題目 兩個單向鍊錶,找出它們的第乙個公共結點。鍊錶的結點定義為 struct listnode 思路 如果有公共結點,那麼從公共結點之後都是一樣的,假設乙個長m,乙個長n,那麼這兩個之間的差值之前的結點不可能是公共的,所以長的乙個先走差值,然後兩個一起走 判斷 int getlistlength l...