劍指 52 兩個鍊錶的第乙個公共結點

2021-08-21 10:33:10 字數 1234 閱讀 6960

題目描述

演算法分析

提交**:

class solution 

while (pnode2)

// pnode1指向較長鍊錶,pnode2指向較短的鍊錶

pnode1 = len1 > len2 ? phead1 : phead2;

pnode2 = len1 <= len2 ? phead1 : phead2;

// 長表先行

for(int i = 0; i < abs(len1 - len2); ++i)

pnode1 = pnode1->next;

while (pnode1 && pnode2)

return nullptr;

}};

測試**:

// ********************測試**********************

void destroynode(listnode* pnode);

void test(char* testname, listnode* phead1, listnode* phead2, listnode* pexpected)

// 第乙個公共結點在鍊錶中間

// 1 - 2 - 3 \

// 6 - 7

// 4 - 5 /

void test1()

// 沒有公共結點

// 1 - 2 - 3 - 4

//

// 5 - 6 - 7

void test2()

// 公共結點是最後乙個結點

// 1 - 2 - 3 - 4 \

// 7

// 5 - 6 /

void test3()

// 公共結點是第乙個結點

// 1 - 2 - 3 - 4 - 5

// 兩個鍊錶完全重合

void test4()

// 輸入的兩個鍊錶有乙個空鍊錶

void test5()

// 輸入的兩個鍊錶有乙個空鍊錶

void test6()

void destroynode(listnode* pnode)

int main(int argc, char* argv)

劍指offer 52 兩個鍊錶的第乙個公共結點

輸入兩個鍊錶,找出它們的第乙個公共結點。說明 應該是兩個單向鍊錶,成y字型,不會成x型,也不會成環。鍊錶只能從表頭單向訪問,可以利用棧的後進先出特性來實現,把兩個鍊錶壓入棧再彈出來,但是那樣需要兩個輔助棧,如果兩條鍊錶的長度分別是m和n,則需要m n個輔助棧空間,同時時間複雜度為o m n 使用兩個...

劍指offer打卡 兩個鍊錶的第乙個公共結點

輸入兩個鍊錶,找出它們的第乙個公共結點。注意因為傳入資料是鍊錶,所以錯誤測試資料的提示是用其他方式顯示的,保證傳入資料是正確的 公共結點是啥 並不是兩個節點的值相同就是公共節點,而是在第一鍊錶和第二鍊錶中都存在乙個節點,該節點往後的子鍊錶在兩個鍊錶中是相同的。如下圖中的6就是第乙個公共結點。設 a ...

劍指Offer 52 兩個鍊錶的第乙個公共節點

輸入兩個鍊錶,找出它們的第乙個公共節點。例 1 2 3 6 7 4 5 公共節點為6。遍歷鍊錶a,將每個節點存入乙個雜湊表。再遍歷鍊錶b,繼續向雜湊表內儲存,當出現衝突時,即找到了第乙個公共節點。時間複雜度 o m n 空間複雜度 o m n 遍歷鍊錶a,每個節點都在b中遍歷查詢,直到有乙個a中節點...