请求大佬帮助
题目:将两个已排序的链表求交集。
思路:遍历L1把L1中与L2相同的保留下来,不同的删掉。
问题:在调用删除某一指定节点时把前面的遍历过的节点一起删了












在解决这个问题时,直接遍历并删除链表中的节点不是一个理想的策略,因为这会改变链表的结构,使得遍历变得复杂且容易出错。对于两个已排序的链表求交集,更高效且简单的方法是采用双指针法。以下是具体的步骤和思路:
初始化双指针:首先,创建两个指针 p1 和 p2 分别指向两个链表 L1 和 L2 的头部。
遍历比较:然后,同时遍历两个链表。如果 p1 和 p2 指向的节点值相等,则说明当前节点是交集的一部分,将其加入到结果链表中(或者直接返回,取决于你的具体实现需求),然后 p1 和 p2 都向前移动一步。如果值不相等,值较小的指针向前移动一步。
终止条件:当任意一个指针到达链表尾部时,停止遍历。
def getIntersectionNode(L1, L2):
p1, p2 = L1, L2
# 遍历直到两个指针相遇
while p1 != p2:
# 如果p1到达链表尾部,则转向L2的头开始遍历
if not p1:
p1 = L2
else:
p1 = p1.next
# 如果p2到达链表尾部,则转向L1的头开始遍历
if not p2:
p2 = L1
else:
p2 = p2.next
# 当两个指针相遇时,即为第一个公共节点,或者都为空表示无交集
return p1
这个方法实际上是利用了两个链表已经排序的特点,通过“走完一个链表再从另一个链表头开始走”的方式,保证了两个指针最终会在第一个公共节点相遇,或者在两个链表都遍历完的情况下确认无交集。
上述伪代码主要用于寻找两个链表的第一个交点。如果你的目标是获取整个交集部分,可以在找到第一个交点后,继续遍历两个链表,直到任一指针到达末尾,期间收集相同节点即可。