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

2022-09-20 08:39:17 字數 918 閱讀 6408

題目描述:輸入兩個鍊錶,找出它們的第乙個公共節點。

圖中的兩個鍊錶的第乙個公共節點就是6。這道題可以使用棧,將兩個鍊錶的節點分別入棧,當所有節點都入棧後,從棧頂開始比較,找出第乙個公共節點,但是這樣需要輔助棧。因為鍊錶假設有公共節點,而且是單鏈表,那麼尾部的節點一定會交匯,如果能同時遍歷到兩個鍊錶尾,那麼要麼沒公共節點,各自到達鍊錶尾,要麼在某一結點出現公共節點。現在問題分解為怎麼讓兩個鍊錶同時遍歷到尾節點,兩個鍊錶不知道誰長誰短,如果知道,長鍊錶比短鍊錶長多少,就讓長鍊表先走多少步,然後兩個一起走,就能同時到達尾部了。那麼這個問題就細分為3步:1.求兩個鍊錶的長度 2.得到長度差,長鍊表先走長度差步 3.一起遍歷兩個鍊錶。go**實現:

1/**

2* definition for singly-linked list.

3* type listnode struct 7*/

8 func getintersectionnode(heada, headb *listnode) *listnode

2324

//長鍊表先走diff步

25for diff > 0

2930

//現在開始一起遍歷,找公共節點

31for longhead != nil && shorthead != nil && longhead !=shorthead

3536

return

longhead37}

3839 func getlinklength(head *listnode) int

4647

return

length

48 }

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

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

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

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

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

面試題52.兩個鍊錶的第乙個公共節點 難度簡單37 輸入兩個鍊錶,找出它們的第乙個公共節點。如下面的兩個鍊錶 在節點 c1 開始相交。示例 1 輸入 intersectval 8,lista 4,1,8,4,5 listb 5,0,1,8,4,5 skipa 2,skipb 3 輸出 referen...