已知两个链表A和B分别表示两个集合,其元素递增排列.请设计一个算法,用于求出A与B的交集,并存放在A链表中
时间: 2024-03-05 15:51:12 浏览: 106
循环链表,双链表及链表应用
5星 · 资源好评率100%
我们可以使用双指针法来解决这个问题。我们用一个指针p1指向链表A的头结点,用一个指针p2指向链表B的头结点。然后比较p1和p2所指向的元素大小,如果相等,则说明这个元素在A和B的交集中,我们将这个元素添加到结果链表中,并将p1和p2同时向后移动一位。如果p1所指向的元素小于p2所指向的元素,则将p1向后移动一位;反之,则将p2向后移动一位。重复这个过程,直到p1或p2为空。
下面是具体的代码实现:
```python
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def getIntersectionNode(headA: ListNode, headB: ListNode) -> ListNode:
dummy = ListNode(0)
cur = dummy
p1, p2 = headA, headB
while p1 and p2:
if p1.val == p2.val:
cur.next = ListNode(p1.val)
cur = cur.next
p1 = p1.next
p2 = p2.next
elif p1.val < p2.val:
p1 = p1.next
else:
p2 = p2.next
return dummy.next
```
其中,headA和headB分别表示链表A和B的头结点,dummy是一个虚拟节点,用来保存结果链表的头结点。我们用cur来追踪结果链表的最后一个节点,每次加入一个新的节点之前,需要将cur指针向后移动一位。最后返回结果链表的头结点即可。
阅读全文