利用已经实现的顺序表实现两个线性表的并集C++语言程序设计代码
时间: 2024-12-02 08:20:07 浏览: 14
实验一顺序表的设计与实现.pdf
在C++中,你可以利用已有的顺序表结构(如数组或动态数组),创建一个函数来合并两个线性表的并集。以下是一个简单的示例,假设我们有一个顺序列表`ListNode`作为基础数据结构,每个节点包含整数值`data`和指向下一个节点的指针`next`。
```cpp
#include <iostream>
// 定义顺序表节点
struct ListNode {
int data;
ListNode* next;
ListNode(int val = 0) : data(val), next(nullptr) {}
};
// 函数来检查节点是否已经在结果列表中
bool isInList(ListNode* list, int target) {
while (list != nullptr) {
if (list->data == target)
return true;
list = list->next;
}
return false;
}
// 合并两个线性表的并集
void mergeLists(ListNode** first, ListNode** second, ListNode** result) {
*result = nullptr; // 初始化结果列表头
ListNode* current = *result;
// 遍历第一个列表
while (*first != nullptr) {
// 如果元素不在结果列表中,则添加到结果列表
if (!isInList(current, (*first)->data)) {
current->next = new ListNode((*first)->data);
current = current->next;
}
*first = (*first)->next;
}
// 接着遍历第二个列表,如果元素不在结果中也添加
while (*second != nullptr) {
if (!isInList(current, (*second)->data)) {
current->next = new ListNode((*second)->data);
current = current->next;
}
*second = (*second)->next;
}
}
// 打印链表
void printList(ListNode* head) {
ListNode* temp = head;
while (temp != nullptr) {
std::cout << temp->data << " -> ";
temp = temp->next;
}
std::cout << "NULL" << std::endl;
}
int main() {
// 创建两个示例列表
ListNode* list1 = new ListNode(1);
list1->next = new ListNode(2);
list1->next->next = new ListNode(3);
ListNode* list2 = new ListNode(2);
list2->next = new ListNode(4);
list2->next->next = new ListNode(5);
ListNode* result = nullptr;
// 合并两个列表
mergeLists(&list1, &list2, &result);
// 打印结果
std::cout << "Resulting merged list: ";
printList(result);
// 清理内存
delete list1;
delete list2;
delete result;
return 0;
}
```
这个程序首先创建了两个列表`list1`和`list2`,然后通过`mergeLists`函数将它们合并成一个新的列表`result`。最后,`printList`函数打印出合并后的并集。
阅读全文