Optimization 查找两个重复链表的交集
假设我有两个链表 6->14->45->38->52->18->90->null和 78->38->44->6->85->52Optimization 查找两个重复链表的交集,optimization,data-structures,linked-list,singly-linked-list,Optimization,Data Structures,Linked List,Singly Linked List,假设我有两个链表 6->14->45->38->52->18->90->null和 78->38->44->6->85->52 这里,第二链表在节点52处与第一链表连接,并且元素38和6也存在于两个链表中。获取这两个链表的交点的最佳方法是什么 查找两个链表的交集,l1和l2的一种简单有效的方法是散列。以下是您可以使用的方法: 创建一个空哈希表h,其中键是节点的地址,该值是一个二进制/布尔值,指示节点是否存在于h中 通过l1并将所有节点的地址插入h 通过l2。对于每个节点,检查它是否存在于h中。如
这里,第二链表在节点52处与第一链表连接,并且元素38和6也存在于两个链表中。获取这两个链表的交点的最佳方法是什么 查找两个链表的交集,
l1
和l2
的一种简单有效的方法是散列。以下是您可以使用的方法:
h
,其中键是节点的地址,该值是一个二进制/布尔值,指示节点是否存在于h
中l1
并将所有节点的地址插入h
l2
。对于每个节点,检查它是否存在于h
中。如果我们在h
中找到一个节点,则该节点与l1
和l2
相交李>
该算法具有
O(m+n)
时间复杂度和O(m)
额外的辅助空间用于h
,其中m
是l1
的大小,n
是l2
的大小。您可以在一个集合中添加每个节点的地址,并检查地址是否已经存在,如果任何地址已经在集合中,那么这意味着在该地址处有一个交集,感谢您的解决方案,但是我们可以依赖地址吗,比如说我正在使用java 1。解决方案是否可跨JVM或不同版本2移植。由于GC,对象可以在没有O(1)空间的任何时间移动h
需要O(n)个额外的空间。@JimMischel感谢您的发现,更新了答案。事实上,我错了。h
所需的额外空间是l1
的长度。因此,在您的术语中,额外的空间是O(m)
。