已知两个链表 A和B分别表示两个集合,其元素递增排列。请设计一个算法,用于求出A与B的交集,并存放在A链表中。
时间: 2025-07-06 13:52:40 浏览: 9
### 设计算法计算两个有序链表的交集并存入第一个链表
为了实现这一目标,可以采用双指针方法遍历两个已排序的链表。由于这两个链表已经处于升序排列状态,因此可以通过比较当前节点值的方式高效找到共同元素。
#### 双指针法解析
创建两个指针分别指向各自链表头部开始同步前进,在每一步中对比两者的数值大小:
- 如果 `list1` 当前节点小于 `list2` 的,则移动 `list1` 指针向前;
- 若相反则推进 `list2` 指针;
- 遇到相等的情况即表示找到了公共项,此时应将其加入结果集中,并同时向后移位两者;
此过程持续直到任意一方到达终点为止[^1]。
#### Python 实现代码示例
```python
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def intersect_sorted_lists(l1: ListNode, l2: ListNode) -> None:
dummy_head = cur = ListNode(0)
while l1 and l2:
if l1.val < l2.val:
l1 = l1.next
elif l1.val > l2.val:
l2 = l2.next
else:
# Add common value only once.
cur.next = ListNode(l1.val)
cur = cur.next
l1 = l1.next
l2 = l2.next
# Connect remaining part directly since we want results stored back into first list
cur.next = l1 or l2
return dummy_head.next
```
该函数接收两个参数作为输入——代表两条单向链接列表的第一个结点对象(`ListNode`)实例化后的头指针变量l1与l2。通过构建一个新的临时哑元节点dummy_head用于简化操作流程,最终返回修改过的新链表起点位置给调用者处理或展示用途。
阅读全文
相关推荐


















