資料結構 判斷兩個鍊錶是否相交若相交求交點

2021-08-28 19:08:24 字數 606 閱讀 6125

單鏈表的實現

思路:兩個不帶環的鍊錶相交,則最後乙個結點一定相同。

int checkcross(plist list1, plist list2)

while (list2->next)

if (list1 == list2)

else

**思路:利用快慢指標,首先求出兩個鍊錶的長度差n-1,然後讓長的鍊錶先走n-1步。然後一起走,相同的地方就是交點。**

pnode getcrossnode(pnode list1, plist list2)

while (cur2)

del = size1 - size2;

cur1 = list1;

cur2 = list2;

if (del > 0) }

else }

while (cur1 != cur2)

return cur1;

}

pnode getcrossnodeh(pnode list1, plist list2)

return null;

}

判斷兩個鍊錶是否相交,若相交,求交點。

第一種情況 兩個鍊錶均不含有環 思路 1 直接法 採用暴力的方法,遍歷兩個鍊錶,判斷第乙個鍊錶的每個結點是否在第二個鍊錶中,時間複雜度為o len1 len2 耗時很大。2 hash計數法 以鍊錶節點位址為值,遍歷第乙個鍊錶,使用 hash 儲存所有節點位址值,結束條件為到最後乙個節點 無環 或 h...

判斷兩個鍊錶是否相交,若相交,求交點。

首先我們來看一下單鏈表 第一種情況 兩個鍊錶均不帶環 判斷兩個不帶環的鍊錶是否相交,如果兩個鍊錶相交的話可如下圖所示 判斷兩個鍊錶是否相交 int isslistcross slistnode phead1,slistnode phead2 相交求交點 兩種方法 法一 因為兩個不帶環鍊錶相交,所以讓...

判斷兩個鍊錶是否相交

思路1 最暴力的辦法,針對鍊錶1的每乙個節點,判斷其是否也在鍊錶2中,複雜度o n m 明顯不是乙個好方法。思路2 給每個節點增加乙個標記量,可以是附在鍊錶中的成員,也可以是另外的乙個結構,例如用乙個陣列來儲存。先遍歷鍊錶1,標記出遍歷過的節點,再遍歷鍊錶2,如果發現某個節點已經被遍歷過,則說明相交...