用C++实现题目4:设A和B是两个单链表(带头结点),其中元素递增有序。设计一个算 法从A和B中的公共元素产生单链表C,要求不破坏A、B的结点
时间: 2024-10-04 16:00:49 浏览: 40
在C++中,我们可以使用迭代的方式来解决这个问题。首先,我们需要创建一个新的单链表C,并定义其头节点。然后,我们遍历A和B,同时比较当前节点的值。如果发现相同的值,则将该节点添加到链表C中。
以下是一个简单的示例算法:
```cpp
// 定义链表节点结构
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(nullptr) {}
};
// 创建C链表头节点
ListNode* createCommonList(ListNode* A, ListNode* B) {
ListNode* C = new ListNode(0); // 新建一个空链表作为结果
ListNode* currC = C; // 当前C链表节点
while (A && B) { // 只要A和B非空
if (A->val < B->val) {
A = A->next; // 如果A较小,移到下一个节点
} else if (A->val > B->val) {
B = B->next; // 如果B较小,移到下一个节点
} else { // 如果相等
currC->next = new ListNode(A->val); // 将节点添加到C
currC = currC->next; // 移动到新的节点
A = A->next; // 还需检查A的下一个节点,因为可能存在连续的公共元素
}
}
return C->next; // 返回新链表C的下一个节点,C本身不包含任何数据
}
```
这个算法只会在找到A和B的第一个公共元素时停止。如果A和B还有更多公共元素,它们不会被添加到C链表中,但A和B本身会保持原样。
阅读全文