最常見的解法:
單鏈表有公共節點,則必定是y狀而不是x狀的。
遍歷得到兩個鍊錶的長度,長鍊表長度m,短鍊表長度n,則長鍊表先走m-n步,然後兩個鍊錶同時逐步遍歷,比較是否有相同節點。
第二種方法:
將乙個鍊錶的表尾指向另乙個鍊錶的表頭,如果兩個鍊錶相交,則會形成環,否則沒有環,因此轉換成判斷是否有環,即通過快指標和慢指標,判斷快慢指標是否相等判斷是否有環,有環則有公共點。
為了找到第乙個公共點,將快慢指標中的乙個指向煉表頭結點,另乙個保持在相交的節點,之後,兩個指標每次走一步,第乙個相遇的節點即是環的入口,也即是本題中要求的第乙個公共點。
補充:
重點是,上面兩種方法都是基於兩個鍊錶本身無環來考慮的。 否則,對第一種方法,不方便得到鍊錶長度;對第二種方法,找不到其中乙個鍊錶的表尾,也就無法實現拼接。
如果兩個鍊錶有環,如何判斷兩個鍊錶是否相交?以及找到第乙個公共節點??
(1)如果兩個有環的鍊錶相交,那麼他們的環必定我公共環。
(2)如果交點不在環上,第乙個公共點就是第乙個交點
(3)如果交點在環上,兩個鍊錶的環的入口點不同,那麼就以任意環的入口點為第一公共點。
(4)也有可能兩個鍊錶均有環,但是他們並不相交。
針對這種情況的演算法:
(1)找到兩個鍊錶的環入口,如果乙個為null,連乙個非null,一定無交點,返回null;
(2)如果均為null,則變成兩個無環鏈表球交點問題;
(3)如果均非null,則判斷兩個有環的鍊錶是否有交點,如果環入口相同,則他們是在分支上相交;否則判斷是否能從乙個環中找到另乙個的入口節點。
p.s:**稍後不上。
兩個鍊錶的第乙個公共節點(鍊錶相交)
題目描述 輸入兩個鍊錶,找出它們的第乙個公共結點 鍊錶只要存在公共節點,那麼公共節點後面所有的節點都是公共的。因此,對於這種一般兩種思路 思路一 將兩個鍊錶分別壓入兩個棧中,然後從棧頂不斷比較。知道遇到第乙個不相等的節點,然後公共節點就是該節點的下乙個節點 思路二 如果能將鍊錶尾部對齊,那麼就可以兩...
如何判斷兩個鍊錶相交及找到第乙個相交點
我們學乙個演算法,一定是為了用吧,所謂 學以致用 嗎?那麼判斷兩個鍊錶是否相交有什麼用呢?這是因為一旦兩個鍊錶出現相交的情況,就可能發生這樣的情況,程式釋放了鍊錶la的所有節點,這樣就導致了另外乙個與之有相交節點的鍊錶lb中的節點也釋放了,而lb的使用者,可能並不知道事實的真相,這會帶來很大的麻煩。...
如何判斷兩個鍊錶相交及找到第乙個相交點
我們學乙個演算法,一定是為了用吧,所謂 學以致用 嗎?那麼判斷兩個鍊錶是否相交有什麼用呢?這是因為一旦兩個鍊錶出現相交的情況,就可能發生這樣的情況,程式釋放了鍊錶la的所有節點,這樣就導致了另外乙個與之有相交節點的鍊錶lb中的節點也釋放了,而lb的使用者,可能並不知道事實的真相,這會帶來很大的麻煩。...