我们的数据结构课程中有一个项目,我遇到了其中一个问题。 由于我们给出的特殊复杂性限制,我在网络中找不到任何合适的解决方案。 问题: 让两个链接列表在m和n节点之后相交(并继续)。第一个列表在公共节点之前有m个节点,第二个列表在公共节点之前有n个节点。 (m和n未知)。 每个列表中的第一个链接有两个指针L1,L2。 没有指向任何列表末尾的指针。 问题是找到O(m + n)限制内的公共节点[我们不能运行到任何链接的末尾...],限制为O(1)额外的内存[没有选择更改/在每个链接中添加其他数据]。 这两个列表只有指向前的指针(单链表)。 可以更改列表指针,但需要恢复原始列表的顺序。 [虽然破坏列表的解决方案也比没有好]。
我经历了几天绘制列表和节点....在这里失去了我的想法:)
非常感谢, 巴拉。
答案 0 :(得分:0)
您已经知道每个列表中公共节点之前的元素数量。
...第一个列表在公共节点之前有m个节点......
只需跳过相应列表中的节点数即可到达公共交叉节点。
我不确定你是否在这里提出正确的问题。如果您的问题陈述发生了变化,请更新。
- >更新: 迭代每个列表以查找其长度。 长度(List1)= x 长度(List2)= y
让x> ÿ 在List1上跳过(x-y)节点。 同时遍历List1和List2并比较两个列表的节点。当您发现两个列表上的节点相等时,这将是您的交叉点。