已知两个链表A和B分别表示两个集合,其元素递增排列。请设计一个算法,用于求出A与B的交集,并将结果存放在A链表中。C++
时间: 2024-10-10 10:05:13 浏览: 47
为了找到两个递增排序链表 A 和 B 的交集,你可以采用双指针策略。首先,你需要创建两个指针,一个指向 A 的头部,另一个指向 B 的头部。然后,比较这两个指针所指向的节点值。如果它们相等,说明找到了交集的一个元素,将其添加到 A 链表的末尾并移动指针;如果 A 的节点值小于 B 的,就移动 A 指针;反之,移动 B 指针。继续这个过程,直到任一链表的头指针到达尾部。
以下是 C++ 代码示例:
```cpp
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode* intersect(ListNode* headA, ListNode* headB) {
if (!headA || !headB) return nullptr;
ListNode* pA = headA, *pB = headB;
while (pA && pB) {
if (pA->val < pB->val) {
pA = pA->next;
if (!pA) break; // 如果 A 到达尾部,则没有交集
} else if (pB->val < pA->val) {
pB = pB->next;
if (!pB) break; // 如果 B 到达尾部,则没有交集
} else { // 否则找到了交集
// 将 B 的节点插入到 A 的链表中
ListNode* newNode = new ListNode(pB->val);
newNode->next = pA->next;
pA->next = newNode;
pA = newNode;
pB = pB->next;
}
}
return headA;
}
```
阅读全文