c语言链表实现两个集合的交集并将结果存放在A链表中
时间: 2024-09-29 12:05:19 浏览: 46
在C语言中,我们可以使用链表数据结构来实现两个集合(假设这两个集合由整数表示)的交集,并将结果存储在一个新的链表A中。这里是一个简单的步骤描述:
1. 定义链表节点结构体 `struct Node` 包含整数值 `value` 和指向下一个节点的指针 `next`。
```c
typedef struct Node {
int value;
struct Node* next;
} Node;
```
2. 创建一个函数 `findIntersection(Node* list1, Node* list2)` 来计算并返回两个链表的交集。首先遍历第一个链表(list1),将每个元素添加到哈希表(如 `unordered_set<int>` 或者自定义的数组)中。然后从第二个链表(list2)开始,检查每个元素是否在哈希表中存在。如果存在,则将其添加到结果链表A的新节点,并继续查找下一个元素。
```c
Node* findIntersection(Node* list1, Node* list2) {
unordered_set<int> set1; // 使用哈希集合保存list1的元素
Node* result = NULL; // 结果链表的头节点
Node* current1 = list1;
while (current1 != NULL) {
set1.insert(current1->value);
current1 = current1->next;
}
current1 = list2;
while (current1 != NULL) {
if (set1.find(current1->value) != set1.end()) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->value = current1->value;
newNode->next = result;
result = newNode;
}
current1 = current1->next;
}
return result;
}
```
3. 最后,创建一个新链表A,并调用这个函数将交集的结果链接起来。
```c
void createIntersectionList(Node** A, Node* intersection) {
*A = intersection;
}
int main() {
Node* list1 = ...; // 初始化第一个链表
Node* list2 = ...; // 初始化第二个链表
Node* result = findIntersection(list1, list2);
createIntersectionList(&result, result); // 存储结果链表
// ...
return 0;
}
```
阅读全文