7-2 两个有序链表序列的交集 分数 20 全屏浏览题目 切换布局 作者 ds课程组 单位 利用c语言写代码
时间: 2023-12-06 17:04:11 浏览: 114
可以使用C语言编写代码来找到两个有序链表的交集。下面是一个可能的实现示例:
```c
#include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
struct Node* next;
};
void printList(struct Node* head) {
while (head != NULL) {
printf("%d ", head->data);
head = head->next;
}
printf("\n");
}
void insert(struct Node** headRef, int newData) {
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data = newData;
newNode->next = NULL;
struct Node** current = headRef;
while (*current != NULL && (*current)->data < newNode->data) {
current = &((*current)->next);
}
newNode->next = *current;
*current = newNode;
}
struct Node* findIntersection(struct Node* list1, struct Node* list2) {
struct Node dummy;
struct Node* tail = &dummy;
dummy.next = NULL;
while (list1 != NULL && list2 != NULL) {
if (list1->data == list2->data) {
insert(&(tail->next), list1->data);
tail = tail->next;
list1 = list1->next;
list2 = list2->next;
} else if (list1->data < list2->data) {
list1 = list1->next;
} else {
list2 = list2->next;
}
}
return dummy.next;
}
int main() {
struct Node* list1 = NULL;
insert(&list1, 1);
insert(&list1, 2);
insert(&list1, 3);
struct Node* list2 = NULL;
insert(&list2, 2);
insert(&list2, 3);
insert(&list2, 4);
printf("List 1: ");
printList(list1);
printf("List 2: ");
printList(list2);
struct Node* intersection = findIntersection(list1, list2);
printf("Intersection: ");
printList(intersection);
return 0;
}
```
在上面的代码中,我们首先定义了一个 `Node` 结构来表示链表的节点。然后,我们使用 `insert` 函数将元素按升序插入链表中。最后,我们使用 `findIntersection` 函数来找到两个有序链表的交集,并使用 `printList` 函数打印结果。
阅读全文