首先,判斷乙個鍊錶是否有環?
對於這個問題:可以用兩個指標,剛開始都指向頭節點,然後乙個指標每次向後移一步,另乙個指標每次向後移兩步,如果最後移兩步的指標為空時,說明無環,如果最後兩個指標相等,說明有環。如果把第一指標看成靜止,則相當於第二個每次走一步,所以在那個環上時,是一定能相遇的。
如何找到這個鍊錶環的入口?
當這兩個指標相遇後,把第乙個指標移向頭,兩個指標每次都只移一步,再次相等時,就是環的入口。證明:設環上相遇位置為距離環入口處p,入口處前有m個節點,,環腎功能有n個節點,從入口處開始計時,則p1走了(m+p-m)%n,因為計時點為入口處,因為p2每次移兩步,所以p2走了(2*(m+p)-m)%n,因為相遇,所以兩指標位置一樣,(m+p-m)%n=(2*(m+p)-m)%n,得x%n=(m+2*p)%n, 所以(m+p)%n=0。所以,當第一指標移m時,第二個指標也移m,此時,第二個指標在(m+p),因為(m+p)%n=0,所以第二個指標在入口處。
如何找到乙個鍊錶中倒數第k個節點?
可以設兩個指標指向頭節點,然後第二個先後移k步,然後兩個同時移,第二個到最後,第乙個指標的位置即為所求。
判斷兩個鍊錶是否相交?
可以用兩個指標,分別指向兩個鍊錶的頭,都把它們移向表尾,如果最後這兩個指標相等,則說明這兩個鍊錶相交。
程式設計之美 3 6 判斷兩個鍊錶是否相交
問題描述 給出兩個單向鍊錶的頭指標 h1,h2 判斷這兩個鍊錶是否相交。假設兩個鍊錶均不帶環。解法一 直觀的想法 判斷第乙個鍊錶胡每乙個節點是否在第二個鍊錶中。時間複雜度為o length h1 length h2 解法二 利用計數的方法 如果兩個鍊錶相交,就會有共同的節點。我們可以把第乙個鍊錶的節...
程式設計之美 3 6 程式設計判斷兩個鍊錶是否相交
1.簡述 給出兩個鍊錶的頭指標,比如h1,h2,判斷這兩個鍊錶是否相交。這裡是為了簡化問題,我們假設兩個鍊錶不帶環。擴充套件 如果鍊錶可能有環呢?擴充套件 如何求出兩個相交鍊錶的相交的第乙個節點。2.分析 這道題,個人感覺理解的還是相對比較清楚完整。主要就是兩個問題,問題一,兩個鍊錶是否相交,問題二...
程式設計之美 判斷兩鍊錶是否相交
程式設計之美 裡面有一篇是講如何判斷兩鍊錶是否相交,讀後覺得原文太過囉嗦。於是,筆者總結了一下,此類問題可以擴充套件為兩大類,分別是 1 單鏈表與環問題 2 單鏈表相交與環問題 本文 給定兩單鏈表a b,只給出兩頭指標。請問 1 如何判斷兩單鏈表 無環 是否相交?有兩種可取的辦法 1 人為構環,將鍊...