【问题标题】:How to find a common node of two intersecting linked lists如何找到两个相交链表的公共节点
【发布时间】:2014-04-16 06:57:12
【问题描述】:

我们的数据结构课程中有一个项目,但我遇到了一个问题。 由于我们给出的特殊复杂性限制,我无法在网络上找到任何适合此问题的解决方案。 问题: 假设有两个链表,它们在 m 和 n 节点之后相交(并继续)。第一个列表在公共节点之前有 m 个节点,第二个列表在公共节点之前有 n 个节点。 (m 和 n 未知)。 有两个指针 L1、L2 指向每个列表中的第一个链接。 没有指向任何列表末尾的指针。 问题是在 O(m+n) 的限制内找到公共节点 [我们无法运行到任何链接的末尾...],额外内存的限制为 O(1) [没有更改选项/在每个链接中添加附加数据]。 这两个列表只有指向前方的指针(单链表)。 列表指针可以更改,但需要恢复原始列表的顺序。 [虽然会毁掉列表的解决方案也总比没有好]。

我在绘制列表和节点数天之后......在这里失去理智:)

非常感谢, 巴拉克。

【问题讨论】:

标签: data-structures linked-list time-complexity singly-linked-list


【解决方案1】:

您已经知道每个列表中公共节点之前的元素数量。

...第一个列表在公共节点之前有m个节点...

只需跳过相应列表中的节点数即可到达公共相交节点。

我不确定您在这里问的问题是否正确。如果您的问题陈述有变化,请更新。

->更新: 迭代每个列表以找到它的长度。 长度(列表 1)= x 长度(列表2)= y

让 x > y 跳过 List1 上的 (x-y) 节点。 同时遍历 List1 和 List2 并比较两个列表的节点。当您发现两个列表上的节点相等时,这将是您的交点。

【讨论】:

  • 谢谢,你是对的。 m 和 n 未知。我更新了问题。
  • 谢谢...我考虑过,但我无法遍历整个列表,因为我只能运行 O(m+n),并且它们取决于公共节点。
猜你喜欢
  • 1970-01-01
  • 2011-01-14
  • 2020-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多