Algorithm 查找两个链表的合并节点?

Algorithm 查找两个链表的合并节点?,algorithm,Algorithm,我经历过这一切 答案描述了下面找到合并节点的算法 1遍历两个链表以找到M和N 2回到头部,然后在较长路径上遍历| M-N |节点 名单 3现在进入锁定步骤并比较节点,直到找到 普通的 我不确定它是否会一直有效?例如:-列表1有10个节点,列表2有3个节点,其中第一个节点正以字母V倒置的形式合并节点SO。现在如果我从上面经过 阿尔戈 1M=10,N=3 2M-N将是7 3I拾取列表1并遍历前7个节点。现在我开始比较它们 从列表1中的第8个节点开始的节点和第二个节点的所有节点 名单 现在,我将永远不

我经历过这一切 答案描述了下面找到合并节点的算法

1遍历两个链表以找到M和N

2回到头部,然后在较长路径上遍历| M-N |节点 名单

3现在进入锁定步骤并比较节点,直到找到 普通的

我不确定它是否会一直有效?例如:-列表1有10个节点,列表2有3个节点,其中第一个节点正以字母V倒置的形式合并节点SO。现在如果我从上面经过 阿尔戈

1M=10,N=3

2M-N将是7

3I拾取列表1并遍历前7个节点。现在我开始比较它们 从列表1中的第8个节点开始的节点和第二个节点的所有节点 名单


现在,我将永远不会捕捉到合并节点,它是这里的第一个节点。我的理解中是否遗漏了一些东西,或者该算法中存在一些缺陷?

如果您建议每个列表的第一个节点是合并节点,那么您误解了问题所在

合并节点后,两个列表都是相同的,因为该节点在两个列表中都是相同的,它必须指向同一个后继节点,该后继节点必须指向同一个后继节点,以此类推。。该算法使用的关键是,从合并节点到列表末尾的项目数相同

从本质上讲,该算法找到列表的长度,然后遍历到较长列表上的一个节点,这意味着该节点和另一个列表的第一个节点到端点的距离相同。然后它沿着节点移动,直到找到匹配的节点

在您的示例中,第8个节点是最早找到合并节点的节点。这是因为第7个节点在其8、9和10之后有三个节点,但其他列表的第一个节点在其之后只有两个节点,因此第7个节点不能是合并的节点


比较节点A8和B1,如果它们不匹配,那么比较A9和B2,如果它们不匹配A10和B3,如果它们不匹配,那么实际上没有合并节点。A表示列表A中不明显的第n个节点。

在两个列表合并后,它们将完全相同,因为它们都指向相同的内存,因此下一项将相同。 如果它们都从第一个节点开始,它们将是完全相同的,因为它们将指向内存中完全相同的位置,想想看,您如何区分第一个列表和第二个列表? 唯一的方法,他们将有不同的长度是如果更短的列表在中间的较长的一个,是在十字路口后,他们是相同的。交叉点后,它们的长度相同

因此,为了解决这个问题,我们希望使列表具有相同的长度,那么它们在交叉点之前和之后的元素数量都相同。
完成后,一步一步地传递所有不同的项目,直到到达同一项目。

M-N将为3。那不是7点吗?无论如何,如果第一个节点是合并节点,这不意味着列表完全相同吗?这与java或C有什么关系,而不是完全不懂语言?@Kevin我已经纠正了这一点。但我的问题仍然是一样的。@scott纠正说第八个节点是正确的答案,你只需要将它与第二个列表中的第一个节点进行比较。把它画在一张纸上。