程式設計之美 3 6 判斷兩個鍊錶是否相交

2021-06-06 23:47:48 字數 699 閱讀 7550

問題描述:給出兩個單向鍊錶的頭指標(h1,h2),判斷這兩個鍊錶是否相交。假設兩個鍊錶均不帶環。

解法一:直觀的想法

判斷第乙個鍊錶胡每乙個節點是否在第二個鍊錶中。

時間複雜度為o(length(h1)*length(h2))。

解法二:利用計數的方法

如果兩個鍊錶相交,就會有共同的節點。我們可以把第乙個鍊錶的節點位址進行hash排序,建立hash表,然後針對第二個鍊錶的每個節點的位址查詢hash表,如果在表中出現,就說明交點出現。

解法三:轉化為另一已知問題

把第二個鍊錶接到第乙個鍊錶後面,如果得到的鍊錶有環,則說明這兩個鍊錶相交。這樣就把問題轉化為判斷乙個鍊錶是否有環。

而判斷乙個鍊錶是否有環,只需進行遍歷看是否會回到起始點就可以判斷出來。

解法四:抓住要點

因為「如果兩個無環的鍊錶相交與某一節點,那麼在這個節點之後的所有節點都是兩個鍊錶共有的」。那麼可以先遍歷第乙個鍊錶,記住最後乙個節點,然後遍歷第二個鍊錶,到最後乙個節點時和第乙個鍊錶的最後乙個節點做比較,若相同,則相交,否則,不相交。

擴充套件問題:

1.若煉表有環呢?如何判斷?

2.如何求相交的第乙個節點?

程式設計之美 3 6 程式設計判斷兩個鍊錶是否相交

1.簡述 給出兩個鍊錶的頭指標,比如h1,h2,判斷這兩個鍊錶是否相交。這裡是為了簡化問題,我們假設兩個鍊錶不帶環。擴充套件 如果鍊錶可能有環呢?擴充套件 如何求出兩個相交鍊錶的相交的第乙個節點。2.分析 這道題,個人感覺理解的還是相對比較清楚完整。主要就是兩個問題,問題一,兩個鍊錶是否相交,問題二...

程式設計之美 判斷兩個鍊錶是否相交

首先,判斷乙個鍊錶是否有環?對於這個問題 可以用兩個指標,剛開始都指向頭節點,然後乙個指標每次向後移一步,另乙個指標每次向後移兩步,如果最後移兩步的指標為空時,說明無環,如果最後兩個指標相等,說明有環。如果把第一指標看成靜止,則相當於第二個每次走一步,所以在那個環上時,是一定能相遇的。如何找到這個鍊...

3 6 程式設計判斷兩個鍊錶是否相交

一 題目 輸入乙個單項鍊表,找出該鍊錶的倒數第k個節點。解法 設立兩個指標,先讓第乙個指標先往前走k步,然後第二個指標放到鍊錶開頭。然後兩個鍊錶一起往後走,當第乙個鍊錶到達鍊錶尾部的時候,後面那個鍊錶所在的位置就剛好是鍊錶的倒數第k個節點!struct node node funtion node ...