Python 链表:通过在到达其中一个链表的末尾后交换其指针来查找两个链表的交集
这个问题是关于寻找交叉点的特定方法,而不是这样做的一般方法。我一开始解决这个问题的方法是肯蒂姆在回答这个问题时的方法。下面引用他的回答 这需要O(M+N)时间和O(1)空间,其中M和N是总数 链接列表的长度。如果公共部分是 很长(即M,N>>M,N)Python 链表:通过在到达其中一个链表的末尾后交换其指针来查找两个链表的交集,python,algorithm,data-structures,linked-list,Python,Algorithm,Data Structures,Linked List,这个问题是关于寻找交叉点的特定方法,而不是这样做的一般方法。我一开始解决这个问题的方法是肯蒂姆在回答这个问题时的方法。下面引用他的回答 这需要O(M+N)时间和O(1)空间,其中M和N是总数 链接列表的长度。如果公共部分是 很长(即M,N>>M,N) 遍历两个链表以找到M和N 回到头部,然后穿过| M− 较长列表上的N个节点 现在进入锁定步骤,比较节点,直到找到常见节点 我很难理解Leetcode上的第三种解决方案。方法不同,但我觉得它可能与上述解决方案类似。有人能告诉我这两个有什么相似之处吗?
看看为什么上面的技巧会起作用,考虑下面两个
列表:A={1,3,5,7,9,11}和B={2,4,9,11},在
节点“9”。由于B.length(=4)
他们都依赖于获取指针,使其与交叉口保持相同的距离,然后同时向前走,直到相遇 第一种方法显式计算在较长列表上向前移动指针的次数,而第二种方法通过使两个指针都执行(m+n)步来隐式计算
我更喜欢第二个指针,因为没有一个指针向前移动,两个指针在每次迭代中都会移动。第一种可能更适用于3+列表,因为您只需完全遍历每个列表一次。它们都依赖于获取指针,使其与交叉点保持相同的距离,然后同时向前走,直到它们相遇。第一种方法显式计算指针在较长列表上向前移动的次数,而第二种方法隐式计算指针向前移动的次数,方法是使两个指针都采取(m+n)步。@PatrickHaugh,你能给我一个答案让我投赞成票吗?两个列表排序了吗?@Code Pe徒弟,没有提到它们是被分类的,所以我会说,‘不,它们不是’。