4、 已知两个链表A和B分别表示两个集合,其元素递增排列。请设计算法求出A与B的交集,存放于A链表中。并释放其他节点的存储空间。
时间: 2024-03-19 09:35:45 浏览: 130
可以使用双指针法,分别指向链表A和B的头节点,比较两个节点的值,如果相等则将该节点加入结果链表中,指针同时后移;如果不相等,则将值较小的节点所在的链表的指针后移。最后释放其他节点的存储空间即可。
代码示例:
```
void intersection(ListNode* A, ListNode* B) {
ListNode* p = A->next;
ListNode* q = B->next;
ListNode* pre = A;
while (p && q) {
if (p->val == q->val) {
pre->next = p;
pre = p;
p = p->next;
q = q->next;
} else if (p->val < q->val) {
ListNode* tmp = p;
p = p->next;
delete tmp;
} else {
ListNode* tmp = q;
q = q->next;
delete tmp;
}
}
pre->next = nullptr;
while (p) {
ListNode* tmp = p;
p = p->next;
delete tmp;
}
while (q) {
ListNode* tmp = q;
q = q->next;
delete tmp;
}
}
```
阅读全文