單向鍊錶是否有交點以及查詢交點

2021-06-22 13:35:40 字數 1204 閱讀 3322

如何判斷是否有交點?

兩個單向鍊錶,如果有交點,那麼它們最後的乙個結點必定是同乙個結點。我們可以找到鍊錶最後乙個結點,比較它們是否是同乙個結點。

如果兩個鍊錶有交點,如何判斷交點的位置呢?

把乙個鍊錶中的每乙個結點與另乙個鍊錶的中每乙個結點做比較,如果找到相同的,那麼這個相同的就是交點了。但是這個演算法的時間複雜度為o(mn)。

如果兩個鍊錶相交,那麼交點的位置到鍊錶末端肯定相同(後面就是同乙個鍊錶了)。我們可以把兩個鍊錶以尾端為起始位置來對齊。從對齊後,依次比較每乙個結點,這樣演算法複雜度為o(m+n)。

**如下:

#includeusing namespace std;

class node;

//判斷兩個鍊錶有無交點。其實是判斷鍊錶最後乙個點是否相同

bool judge(node* h1,node* h2)

node* findnode(node* h1,node* h2)

while(h2)

if(l1>l2)

if(l2>l1)

while(head1!=head2)

return head1;

}int main()

//構建鍊錶2

current=head2;

for(int i=1;i<3;i++)

//連線兩個鍊錶

current->next=head1->next->next;

bool test=judge(head1,head2);

node* common=null;//交點

if(test)

common=findnode(head1,head2);

//釋放記憶體

最後在釋放記憶體時要注意,如果像普通單向鍊錶那樣釋放,會造成交點記憶體釋放兩次,以及交點後面記憶體釋放的不確定性。

單向鍊錶是否有交點以及查詢交點

如何判斷是否有交點?兩個單向鍊錶,如果有交點,那麼它們最後的乙個結點必定是同乙個結點。我們可以找到鍊錶最後乙個結點,比較它們是否是同乙個結點。如果兩個鍊錶有交點,如何判斷交點的位置呢?把乙個鍊錶中的每乙個結點與另乙個鍊錶的中每乙個結點做比較,如果找到相同的,那麼這個相同的就是交點了。但是這個演算法的...

如何判斷兩個單向鍊錶是否有相交,並找出交點

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

如何判斷兩個單向鍊錶是否有相交,並找出交點

深信服一道筆試 如何判斷兩個單向鍊錶是否有相交,並找出交點。題比較簡單,單向鍊錶有交點意思就是交點後的節點都是一樣的了。node findnode node phead1,node phead2 while p1 next null while p2 next null if p1 p2 else ...