感謝azuryy
提供《程式設計之美》3.6節「鍊錶相交」擴充套件問題答案
)擴充套件1:鍊錶1 步長為1, 鍊錶2步長為2 ,如果有環且相交則肯定相遇,否則不相交
list1 head: p1
list2 head: p2
while( p1 != p2 && p1 != null && p2 != null )
if ( p1 == p2 && p1 && p2) //相交
else //不相交
擴充套件2:在判斷是否相交的過程中要分別遍歷兩個鍊錶,同時記錄下各自長度。
node* step( node* p, node* q)
while( q->next )
result = ( p == q );
if ( result )
plen > qlen ? p = head : q = head;
while ( p != q )
reutrn p;
}return null;
}
程式設計之美 鍊錶相交問題
1 判斷兩個鍊錶是否相交 假設兩個鍊錶均不帶環 有四種方法 解法1 直觀的想法 判斷第乙個鍊錶的每個節點是否在第二個鍊錶中,這種方法的時間複雜度為o length h1 length h2 解法2 利用計數的方法 對第乙個鍊錶的節點位址進行hash排序,建立hash表,然後針對第二個鍊錶的每個節點的...
《程式設計之美》兩鍊錶相交及擴充套件詳解
程式設計之美 兩鍊錶相交及擴充套件詳解 給定乙個單鏈表,只給出頭指標h 1 如何判斷是否存在環?2 如何知道環的長度?3 如何找出環的連線點在 4 帶環鍊錶的長度是多少?解法 1 對於問題1,使用追趕的方法,設定兩個指標slow fast,從頭指標開始,每次分別前進1步 2步。如存在環,則兩者相遇 ...
《程式設計之美》讀書筆記
程式設計之美 讀書筆記 一 中國象棋將帥問題 程式設計之美 讀書筆記 二 求二進位制數中1的個數 擴充套件問題 程式設計之美 讀書筆記 三 一摞烙餅的排序問題 程式設計之美 讀書筆記 四 買書折扣問題的貪心解法 程式設計之美 讀書筆記 五 飲料 問題 程式設計之美 讀書筆記 六 連連看遊戲設計 程式...