首页新闻找找看学习计划

如何高效判断两个双向链表是否有一个共享元素(即相交)?

0
[待解决问题]

有两个双向不循环链表,需要检查它们有没有相交,如何高效快速的得出答案?

各位讨论起来~~~

云眸的主页 云眸 | 菜鸟二级 | 园豆:202
提问于:2013-03-16 10:12
< >
分享
所有回答(3)
0

最朴素的思路是遍历一个链表,检测是否出现在另一个链表中;对第一步的遍历,时间复杂度为m,第二部的查找,复杂度可以接近log(n)

KallMeNeo | 园豆:247 (菜鸟二级) | 2013-03-16 10:37

按照你的想法,复杂度应该是m*n,可否有更高效的呢?

支持(0) 反对(0) 云眸 | 园豆:202 (菜鸟二级) | 2013-03-16 11:49

@云眸: 其实是m*log(n)

支持(0) 反对(0) KallMeNeo | 园豆:247 (菜鸟二级) | 2013-03-17 10:11
0

如果两个有相交,则交点之后的所有元素为共有元素,所以只需要判断每个链表的最后一个元素是否相等,则可判断两个链表是否相交。

如果为双向链表中有一个为共有元素。那该两个链表为同一链表。只需去其中一个链表的元素,在另一链表中遍历是否有相同节点即可。

走着。。 | 园豆:202 (菜鸟二级) | 2013-03-16 11:35

需要澄清两个问题,首先,链表不是有序的;其次,相交的意思是只有一个共有节点;

支持(0) 反对(0) 云眸 | 园豆:202 (菜鸟二级) | 2013-03-16 11:48

@云眸: 根据链表的结构来看,如果有一个共有节点,则其前节点指针和后节点指针都是一样的,指向相投的节点。这才是严格意义的共有。难道只是数据共有?

支持(0) 反对(0) 走着。。 | 园豆:202 (菜鸟二级) | 2013-03-16 11:57

@走着。。: 是指向堆内存里的同一个节点。。。

支持(0) 反对(0) 云眸 | 园豆:202 (菜鸟二级) | 2013-03-16 13:02
0

支持云眸的说法,否则的话,什么内存里的一“点”?4个字节,2个字节,1个字节还是一个比特?我的理解这个“点”,是一个数据结构。当然,如果你不是这个意思,那么。。。

Luke Zhang | 园豆:293 (菜鸟二级) | 2013-03-17 21:23
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册