判斷兩個鍊錶是否相交

2021-06-18 16:19:57 字數 848 閱讀 8559

參考:

判斷兩個鍊錶是否相交:(假設兩個鍊錶都沒有環)有以下三種方法:

1、判斷第乙個鍊錶的每個節點是否在第二個鍊錶中

2、把第二個鍊錶連線到第乙個後面,判斷得到的鍊錶是否有環,有環則相交

3、先遍歷第乙個鍊錶,記住最後乙個節點,再遍歷第二個鍊錶,得到最後乙個節點時和第乙個鍊錶的最後乙個節點做比較,如果相同,則相交

如何判斷乙個單鏈表是有環的?(注意不能用標誌位,最多只能用兩個額外指標)

一種o(n)的辦法就是(用兩個指標,乙個每次遞增一步,乙個每次遞增兩步,如果有環的話兩者必然重合,反之亦然):

bool check(const node* head)

return false;

}

方法3的實現:

#include #include typedef struct node

node;

node* findonenode(node* phead1,node* phead2)

while(p2->next != null) //遍歷鍊錶2,獲取鍊錶長度

if(p1!=p2)

return null;

else

while(p1!=p2)

return p1;

} else

while(p1!=p2)

return p1;

} }}

方法三的總結:

1、如果兩鍊錶相交,那麼最後乙個節點一定是公共的,也就是符合y模型,而不是x模型。

2、要考慮兩個鍊錶的長度

3、時間複雜度為o(i+j)

判斷兩個鍊錶是否相交

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

判斷兩個鍊錶是否相交

判斷兩個鍊錶是否相交,程式設計之美 給出了以下方法 1.判斷第乙個鍊錶的每個節點是否在第二個鍊錶中,這種方法的時間複雜度為 o length h1 length h2 這種方法很耗時間 2.利用計數的方法 乙個簡單的做法是對第乙個鍊錶的結點位址進行hash排序,建立hash表,然後針對第二個鍊錶的每...

判斷兩個鍊錶是否相交

給出兩個單行鍊錶的頭指標 判斷這兩個鍊錶是否相交 為了簡化 這裡假設兩個鍊錶均不帶環 方法1 判斷第乙個鍊錶的每個節點是否在第二個鍊錶中 這種方法的時間複雜度為o lenth l1 lenth l2 方法2 如果兩個鍊錶相交 那麼這兩個鍊錶就會有共同的節點 而節點位址又是節點的唯一標識 所以我們能夠...