设计一个算法,设计一个算法,求两个单链表表示的集合的交集,并将结果用一个新的单链表保存并返回
时间: 2023-03-31 18:02:41 浏览: 91
可以使用哈希表来实现求两个单链表表示的集合的交集。具体步骤如下:
1. 遍历第一个链表,将链表中的元素存储到哈希表中。
2. 遍历第二个链表,对于每个元素,判断其是否在哈希表中出现过,如果出现过,则将该元素添加到新的单链表中。
3. 返回新的单链表即为两个单链表的交集。
代码实现如下:
struct ListNode* getIntersectionNode(struct ListNode* headA, struct ListNode* headB) {
struct ListNode* p = headA;
struct ListNode* q = headB;
struct ListNode* res = NULL;
struct ListNode* tail = NULL;
int hash[10001] = {}; // 哈希表,用于存储链表中的元素
// 遍历第一个链表,将链表中的元素存储到哈希表中
while (p != NULL) {
hash[p->val] = 1;
p = p->next;
}
// 遍历第二个链表,对于每个元素,判断其是否在哈希表中出现过
// 如果出现过,则将该元素添加到新的单链表中
while (q != NULL) {
if (hash[q->val] == 1) {
struct ListNode* node = (struct ListNode*)malloc(sizeof(struct ListNode));
node->val = q->val;
node->next = NULL;
if (res == NULL) {
res = node;
tail = node;
} else {
tail->next = node;
tail = node;
}
}
q = q->next;
}
// 返回新的单链表即为两个单链表的交集
return res;
}
阅读全文