【问题标题】:How do i find the common node point of 2 single linked lists?如何找到 2 个单链表的公共节点?
【发布时间】:2020-10-31 22:36:16
【问题描述】:

我解决这个问题的方法是使用哈希图来存储第一个链表的地址并遍历第二个数组并检查我是否找到了地址。如果找到了,我将返回该地址处的节点。 这需要 O(m+n),其中 m 和 n 是链表的长度,但这里我们使用 O(Linear) 空间复杂度。 我发现了另一种解决这个问题的方法,它具有恒定的空间但相同的时间复杂度,但它并没有消除我的疑问。 link to the question

如果我的输入是

    list 11 = 1 -> 2 -> 3 -> 4 -> 6 ->7;
    list l2 = 2 -> 9;

在这种情况下,我在截断额外长度后对列表的一次遍历会变成这样

   diff=4;   // i would advance the list 1 by 4 elements as it has greater length
   l1= 6-> 7;
   l2= 2 -> 9;

在这里我丢失了我的交叉点。 有人可以帮我解决这个问题吗?

【问题讨论】:

  • 您的列表没有问题陈述所定义的交点。
  • 是的!对不起,我在谈论公共节点..将编辑问题
  • 为什么不遍历一个列表并将每个节点的地址添加到std::unordered_set,然后尝试将下一个列表中的节点添加到该集合中。添加失败时,你找到了公共节点。如果两个列表都添加了指针成功--没有公共节点。
  • 在您的代码中,l1 和 l2 已排序,但在介绍中未指定。列表是否已排序?
  • 是的,我明白了...仅适用于倒 Y 形链表。

标签: java c++ c algorithm


【解决方案1】:

该方法仅在输入链表与交点相同时有效,例如:

1 -> 2 -> 3 -> 4 -> 5

12 -> 11-> 10 -> 3 -> 4 -> 5

这里两个列表从交点3开始是一样的。

只有这样该算法才有效。

注意:

这个问题基本上是为了找到一个倒Y形列表(两个列表的组合)的交点

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    • 2011-11-04
    • 1970-01-01
    • 2018-09-29
    • 1970-01-01
    相关资源
    最近更新 更多