如何判斷兩個鍊錶是否相交,python實現

2021-09-24 05:59:54 字數 2147 閱讀 7277

# 判斷兩個鍊錶是否相交

# 方法一,首尾相接法。先首尾相連,再判斷是否有環。有環則說明相交

# 首尾相連

defcreate_annulation

(phead1, phead2):if

not phead1 or

not phead2 or

not phead1.

next

ornot phead2.

next

:return

none

last = phead1.

next

# 指向phead1最後乙個節點

while last.

next

: last = last.

next

# p1最後節點的next指向p2頭節點

last.

next

= phead2

return phead1

# 判斷是否有環

defexist_loop

(phead):if

not phead or

not phead.

next

:return

none

slow = phead

fast = phead

while slow.

next

and fast.

next

.next

: slow = slow.

next

fast = fast.

next

.next

if slow == fast:

return

true

return

false

# 方法二,hashset法。遍歷鍊錶1,將所有next域的節點儲存在hashset中,遍歷鍊錶2,與當前hashset中的值去比較,如果有相同的,則說明相交了。

defjudge_x

(phead1, phead2):if

not phead1 or

not phead2 or

not phead1.

next

ornot phead2.

next

:return

none

hashset =

set(

) p = phead1 # 用來遍歷鍊錶

hashset.add(p)

while p.

next

: p = p.

next

hashset.add(p)

# 這裡注意要你把所有的節點都儲存到hashset中

p = phead2

while p:

if p.

next

in hashset:

return

true

p = p.

next

return

false

if __name__ ==

"__main__"

:# 先構造出兩個相交的鍊錶

phead1 = lnode(0)

p1 = lnode(1)

p2 = lnode(2)

p3 = lnode(3)

p4 = lnode(4)

phead1.

next

= p1

p1.next

= p2

p2.next

= p3

p3.next

= p4

phead2 = lnode(10)

pa = lnode(11)

phead2.

next

= pa

pa.next

= p2

p2.next

= p3

p3.next

= p4

# newphead1 = create_annulation(phead1, phead2)

# print (exit_loop(newphead1))

print

(judge_x(phead1, phead2)

)

判斷兩個鍊錶是否相交

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

判斷兩個鍊錶是否相交

參考 判斷兩個鍊錶是否相交 假設兩個鍊錶都沒有環 有以下三種方法 1 判斷第乙個鍊錶的每個節點是否在第二個鍊錶中 2 把第二個鍊錶連線到第乙個後面,判斷得到的鍊錶是否有環,有環則相交 3 先遍歷第乙個鍊錶,記住最後乙個節點,再遍歷第二個鍊錶,得到最後乙個節點時和第乙個鍊錶的最後乙個節點做比較,如果相...

判斷兩個鍊錶是否相交

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