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