如何查找两个链表是否相互交叉?

时间:2011-09-06 15:30:17

标签: algorithm

  

可能重复:
  Finding the intersecting node from two intersecting linked lists

给出两个大的链表,其中

  1. a)交叉
  2. b)可以相交

    找到交叉点的节点。通过交集,我不是指他们的价值观。我的意思是节点很常见。即,列表A和列表B中的两个不同节点指向同一节点

  3. E.g。

    3->1->2->4->NULL
          ^
          |
    5->4->3
    
    3->1->2->NULL
          ^
          |
    9->2->3
    

    PS:  3.不允许使用哈希表。

    1. 排除了明显的蛮力方法N * M比较。我们想要更好的解决方案。

2 个答案:

答案 0 :(得分:6)

要查找是否存在交叉点,只需检查两个列表的“结尾”是否具有相同的地址。但这并非绝对必要。

通过从最后一个节点到第一个节点[*]的链接,将第一个列表转换为循环。然后使用您最喜欢的循环查找算法从第二个列表的开头开始,找到循环及其起点。如果没有交叉点,则在第二个列表中找不到循环。如果在第二个列表中找到一个循环,那么循环的起点就是交点。

[*]如果您被允许修改数据,请执行此操作。否则,写一个特殊情况特殊节点的“前进”功能。

答案 1 :(得分:3)

如果列表与它们的最后节点相交是相同的