大雜燴 單向鍊錶是否存在環或是否相交

2021-09-07 12:16:15 字數 740 閱讀 1840

給定乙個單鏈表,只給出頭指標h:

1、如何判斷是否存在環?

2、如何知道環的長度?

3、如何找出環的連線點在**?

4、帶環鍊錶的長度是多少?

解法:1、對於問題1,使用追趕的方法,設定兩個指標slow、fast,從頭指標開始,每次分別前進1步、2步。如存在環,則兩者相遇;如不存在環,fast遇到null退出。

2、對於問題2,記錄下問題1的碰撞點p,slow、fast從該點開始,再次碰撞所走過的運算元就是環的長度s。

3、問題3:有定理:碰撞點p到連線點的距離=頭指標到連線點的距離,因此,分別從碰撞點、頭指標開始走,相遇的那個點就是連線點。

4、問題3中已經求出連線點距離頭指標的長度,加上問題2中求出的環的長度,二者之和就是帶環單鏈表的長度。

給定兩單鏈表a、b,只給出兩頭指標。請問:

1、如何判斷兩單鏈表(無環)是否相交?

有兩種可取的辦法:

(1)人為構環,將鍊錶a的尾節點指向鍊錶b,再判斷是否構環成功?從鍊錶b的頭指標往下遍歷,如果能夠回到b,則說明相交。

(2)判斷兩鍊錶最後乙個節點是否相同,如果相交,則尾節點肯定是同一節點。

2、判斷出兩個鍊錶相交後就是判斷他們的交點了。

假設第乙個鍊錶長度為len1,第二個問len2,然後找出長度較長的,讓長度較長的鍊錶指標向後移動|len1 - len2| (len1-len2的絕對值),然後在開始遍歷兩個鍊錶,判斷節點是否相同即可。

啦啦啦

大雜燴 單向鍊錶是否存在環或是否相交

給定乙個單鏈表,只給出頭指標h 1 如何判斷是否存在環?2 如何知道環的長度?3 如何找出環的連線點在 4 帶環鍊錶的長度是多少?解法 1 對於問題1,使用追趕的方法,設定兩個指標slow fast,從頭指標開始,每次分別前進1步 2步。如存在環,則兩者相遇 如不存在環,fast遇到null退出。2...

判斷單向鍊錶中是否存在環

程式設計思路 追趕問題 在同一圓環上,當兩個物體以不同的速度前進時,他們總能在某個時間點上再次相遇 即當兩個指標以不同的移動速度在乙個單向鍊錶上移動時,若該鍊錶有環的存在,則這兩個指標總會在某一時刻同時指向鍊錶上的同乙個節點 include struct hasring bool ishasring...

鍊錶是否存在環

鍊錶環的問題有兩種,一種是判斷是否存在環,另一種是在有的基礎上返回入環的第乙個節點。簡單思路 1 遍歷鍊錶,如果遇到空,那麼肯定無環。2 在遍歷的過程中,每個節點都加入到雜湊表中,加入前判斷是否存在,如果存在的話那麼就有環,而且第乙個判斷存在的節點就是入環的第乙個節點。總結 這個比較簡單,既可以做到...