【发布时间】:2021-01-17 14:59:56
【问题描述】:
我有一个任务,我需要找到 2 个单独链接(单独与单独)列表的交集。我还必须为 2 个双重链接(双重与双重)列表执行此操作:
-
对于单链表,我使用
mergeSort()对两个列表进行排序,然后逐项比较 ==> O(m.log(m) + n.log(n)) -
我对双向链表感到困惑:同样可以工作,但我想可能有更快的方法。
谁能告诉我是否有更有效的方法来找到两个双向链表的交集?我想也许我们可以合并它们并检查重复项,但我不确定这将如何工作以及效率如何。
编辑:请注意,此处的“交集”表示共享值,而不是公共节点。 编辑:应该在不使用哈希的情况下完成实现
【问题讨论】:
-
如果两个双向链表共享任何节点,那么它们是相同的并且每个节点都相交。对于单链表,如果它们相交,则它们共享相同的终端节点。测量两个列表的长度,沿着较长的列表移动,直到与末端等距,然后同步比较节点对。
-
你能解释一下“交叉点”是什么意思吗?您是否期望第一个列表中的链接指向与第二个列表中的链接相同的对象?还是我们在谈论重复值?
-
@Stef 我很抱歉模棱两可。我说的是重复
-
这些值是否适合内存?您可以在线性时间、线性空间中为此使用哈希。
-
@Dave 我无权访问哈希。
标签: list algorithm mergesort doubly-linked-list processing-efficiency