判斷兩個不帶環鍊錶是否相交?若相交,求入口點。

2021-09-30 14:23:32 字數 1264 閱讀 7011

通常情況下,不帶環的兩個鍊錶相交如上圖所示。

方法一:<1>先判斷鍊錶是否相交

①若相交,那麼兩個鍊錶的尾節點必然相同。則可以遍歷兩個鍊錶,判斷其尾節點。

②若不相交,則尾節點必然不相同。

<2>若相交,求其入口點

①通過遍歷兩個鍊錶可以得到其長度(假設為len1和len2),通過比較len(len=abs(len1-len2)),讓長的鍊錶先走len步,然後兩個鍊錶同時走,當他們遇到第乙個相等的節點的時候,即為其入口點。

//判斷兩鍊錶是否相交

typedef

struct listnode

node;

bool iscrosslist(node *head1 , node *head2) //判斷兩個鍊錶是否相交

while (head1)

while (head2)

return head1 == head2 ? true : false;

}

//判斷鍊錶的入口點

node *crossnode(node *head1,node *head2)

while(cur2)

len = abs(len1 - len2);

if (len1>len2)

} else

}while (head1 != head2)

return head1;

}

方法二:直接建立兩個棧,把鍊錶放入棧中,遵循先進後出原則,尾節點先出,即可判斷是否相交。出棧的最後乙個相同節點即為入口點。

node *crossnode(node *head1,node *head2)

stack

s1;

stack

s2; //建立兩個棧

node *cur1 = null;

node *cur2 = null;

while (head1 != null)

while (head2 != null)

if (cur1 == cur2)

return ret;

}else

}

判斷兩個鍊錶是否相交,若相交,求交點。

第一種情況 兩個鍊錶均不含有環 思路 1 直接法 採用暴力的方法,遍歷兩個鍊錶,判斷第乙個鍊錶的每個結點是否在第二個鍊錶中,時間複雜度為o len1 len2 耗時很大。2 hash計數法 以鍊錶節點位址為值,遍歷第乙個鍊錶,使用 hash 儲存所有節點位址值,結束條件為到最後乙個節點 無環 或 h...

判斷兩個鍊錶是否相交,若相交,求交點。

首先我們來看一下單鏈表 第一種情況 兩個鍊錶均不帶環 判斷兩個不帶環的鍊錶是否相交,如果兩個鍊錶相交的話可如下圖所示 判斷兩個鍊錶是否相交 int isslistcross slistnode phead1,slistnode phead2 相交求交點 兩種方法 法一 因為兩個不帶環鍊錶相交,所以讓...

判斷兩條鍊錶 不帶環 是否相交,如果相交,求出交點

定義鍊錶節點 typedef struct listnode node 判斷兩個鍊錶 鍊錶不帶環 有沒有相交?思路 如果兩個鍊錶相交,那麼最後乙個節點肯定是相同的 因此判斷兩個鍊錶的最後乙個節點是不是相同的就可以了 bool isintersect node first1,node first2 w...