給定兩個(單向)鍊錶,判定它們是否相交並返回交點。請注意相交的定義基於節點的引用,而不是基於節點的值。換句話說,如果乙個鍊錶的第k個節點與另乙個鍊錶的第j個節點是同一節點(引用完全相同),則這兩個鍊錶相交。
首先最容易想到暴力搜尋,對a鏈的每乙個節點,都對b鍊錶進行遍歷搜尋看是否相同
public listnode getintersectionnode
(listnode heada, listnode headb)
nb = nb.next;
} na= na.next;
}return null;
}
這種就不分析了
然後再思考
如果先把a鍊錶遍歷一次,節點存到容器中。
遍歷b鍊錶時,看b鍊錶節點在不在容器,如果存在,就相交。
這也是一種把辦法。
再思考,畫圖,
分析:單鏈表,如果相交,之後節點一樣
如果a和b不相交,一定會走到底部,此時nanull,nbnull,退出迴圈
public listnode getintersectionnode
(listnode heada, listnode headb)
listnode na=heada,nb = headb;
while
(na!=nb)
return na;
}
菜雞學習記錄,供後續複習。 判斷兩個單向鍊錶是否相交
鍊錶分為有環和無環,如果兩個鍊錶存在相交,則只有兩種可能,兩個鍊錶都無環或者都有環。下面分別討論。2.1定義鍊錶 單向鍊錶 public static class linknode 2.2判斷是否有環 判斷是否有環,有環返回入口點,無環返回null。public static linknode is...
六 判斷兩個單向鍊錶是否相交
判斷兩個單向鍊錶是否相交,有兩種情況,一種是兩個不帶環的單向鍊錶相交,一種是兩個帶環的單向鍊錶相交。情況1 兩個不帶環的單向鍊錶相交 判斷兩個不帶環的單向鍊錶是否相交。時間複雜度o n 空間複雜度o 1 思路 如果兩個沒有環的鍊錶相交於某一節點,那麼在這個節點之後的 所有節點都是兩個鍊錶共有的,如果...
判斷兩個鍊錶是否相交
思路1 最暴力的辦法,針對鍊錶1的每乙個節點,判斷其是否也在鍊錶2中,複雜度o n m 明顯不是乙個好方法。思路2 給每個節點增加乙個標記量,可以是附在鍊錶中的成員,也可以是另外的乙個結構,例如用乙個陣列來儲存。先遍歷鍊錶1,標記出遍歷過的節點,再遍歷鍊錶2,如果發現某個節點已經被遍歷過,則說明相交...