一尘不染

从两个相交的链表中找到相交的节点

algorithm

假设有两个单链表,两者在某个点相交并成为一个单链表。

两个列表的开头或起始指针都是已知的,但是相交的节点是未知的。同样,每个列表在它们相交之前的节点数是未知的,并且两个列表可能具有不同的关系,即List1可能在到达交点之前具有n个节点,而List2在它到达交点之前可能具有m个节点,其中m和n可以是

  • m = n,
  • m <n或
  • m> n

一种已知或简单的解决方案是将第一列表中的每个节点指针与第二列表中的其他所有节点指针进行比较,匹配的节点指针将通过这些节点将我们引向相交的节点。但是,这种情况下的时间复杂度将为O(n
2)较高。

查找相交节点的最有效方法是什么?


阅读 192

收藏
2020-07-28

共1个答案

一尘不染

这需要O(M + N)时间和O(1)空间,其中M和N是链接列表的总长度。如果公用部分很长(即M,N >> m,n),则效率可能较低

  1. 遍历两个链接列表以查找M和N。
  2. 回到头顶,然后遍历| M − N | 较长列表上的节点。
  3. 现在,进入锁定步骤并比较节点,直到找到公用节点为止。

编辑:在这里查看更多。

2020-07-28