algorithm - 检查两个链表是否合并。如果有,在哪里?

标签 algorithm linked-list data-structures

这个问题可能很老,但我想不出答案。

比如说,有两个不同长度的列表,在一点合并;我们怎么知道合并点在哪里?

条件:

  1. 我们不知道长度
  2. 我们应该只解析每个列表一次。

Example of two merged linked lists.

最佳答案

以下是迄今为止我所见过的最伟大的 - O(N),没有计数器。我在面试候选人 S.N. 时得到了它。在 VisionMap .

像这样创建一个交互指针:它每次都向前移动直到结束,然后跳转到相反列表的开头,依此类推。 创建其中两个,指向两个头。 每次都将每个指针向前推进 1,直到它们相遇。这将在一次或两次通过后发生。

我仍然在采访中使用这个问题 - 但要看看人们需要多长时间才能理解为什么这个解决方案有效。

关于algorithm - 检查两个链表是否合并。如果有,在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1594061/

相关文章:

database - 数据库中 B 树索引的空间复杂度

algorithm - 设计一个图,其中最短路径树比最小生成树长

algorithm - 为什么语音识别没有进步?

c++制作链表的深层拷贝

c - 将文件数据读入 C 中的链表

python - 如何在python中将链表列表中的链表节点放置到堆上

c++ - 从日志文件中找到最常见的字符串

c++ - 最快的预打包键值对搜索

检测重复小数的算法?

c++ - 如何创建一个函数,仅通过更改链接来交换单向链表中的两个相邻元素?