【发布时间】:2014-06-12 03:08:06
【问题描述】:
大多数网站都提供此解决方案(请参阅 http://www.geeksforgeeks.org/write-a-function-to-get-the-intersection-point-of-two-linked-lists/ 的方法 3)
1) 获取第一个列表中的节点数,设 count 为 c1。
2) 获取第二个列表中的节点数,设 count 为 c2。
3) 获取计数差 d = abs(c1 – c2)
4) 现在从第一个节点遍历更大的列表直到 d 个节点,所以 从这里开始,两个列表都没有相同的节点。
5) 然后我们可以并行遍历这两个列表,直到遇到 一个公共节点。 (注意,获取一个公共节点是通过比较来完成的 节点的地址)
如果第一个节点本身是合并节点,我的理解是上述解决方案将不起作用。说 list1 有 5 个元素, list2 有 3 个元素,其中 element1 是 合并点。根据上述算法,差异计数为 2。所以首先我们将遍历 list1 中的前 2 个节点。从 3 elementin 列表开始, 逐个遍历每个列表的元素feom。所以我永远不会得到合并点。不是吗?
我提出的解决方案:
1) 遍历 list1。
2) 将每个元素的内存地址(使用 System.identitityHashMap)放入基于哈希的数据结构中
3)通过list2遍历。获取每个元素的内存地址,看看是否存在于hashmap中。如果是,则为合并点。
更新:-输入是
list1 = 1 -> 3 -> 5 -> 6 -> 7
list2 = 1 -> 4 -> 5
根据链接中建议的解决方案,大小差异为 2。首先遍历 list1 中的 3,然后将 5 -> 6 -> 7 与 1 -> 4 -> 5 进行比较。所以这里错过了合并点1。
【问题讨论】:
-
您发布的示例不正确。
list2不能在节点5处结束,因为5链接到6等等。请参阅对我的回答的评论。 -
此外,在您的示例中:节点
1:1 -> 3在第一个列表中,然后1 -> 4在第二个列表中。你确实知道链表是什么,对吧?节点1只能有一个next节点。
标签: java data-structures linked-list