單鏈表的實現:
思路:兩個不帶環的鍊錶相交,則最後乙個結點一定相同。
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,如果發現某個節點已經被遍歷過,則說明相交...