【发布时间】:2021-01-18 20:54:32
【问题描述】:
所以我知道弗洛伊德的循环检测算法,但在研究这个问题时,我想出了另一个解决它的想法。
如果我们可以在遍历链表时将每个节点的'nextpointer'存储在一个向量/列表中,以及是否任何元素的频率大于1的计数。 如果向量/列表中的任何值出现不止一次,则基本上意味着单个节点已被指向两次(或更多),因此它成为一个循环。
我无法在 Python 3 中编写相同的代码。如果你们能帮助我,我将不胜感激。 谢谢。
class Node:
head = None
def __init__(self, data=None, nextnode=None):
self.data = data
self.next = nextnode
def findMergeNode(head1, head2):
a = set()
b = set()
while (head1 and head2):
a.add(head1)
head1 = head1.next
b.add(head2)
head2 = head2.next
if (a.intersection(b)):
return a.intersection(b)
【问题讨论】:
-
这可以工作,但是 (1) 它需要 O(n) 空间,并且 (2) 在向量中查找需要 O(n)我>时间。第二个可以用一组来解决,但第一个仍然是一个主要缺点。
-
欢迎来到 SO!有趣的问题。但是,您能否添加(摘录)您尝试对其进行编码并指出您没有成功的地方。否则问题是“请为我编码”类型。
-
@Timus 是的。抱歉我没有先发帖。
标签: python-3.x list pointers linked-list cycle-detection