判斷兩個單向鍊錶是否相交

2021-10-05 03:26:21 字數 803 閱讀 4805

給定兩個(單向)鍊錶,判定它們是否相交並返回交點。請注意相交的定義基於節點的引用,而不是基於節點的值。換句話說,如果乙個鍊錶的第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,如果發現某個節點已經被遍歷過,則說明相交...