已知链表节点信息为学号、姓名、课程成绩。现有两个链表分别包含三个节点。用C语言编程实现两个链表的合并然后输出。
时间: 2024-05-12 09:13:03 浏览: 156
可以使用以下代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int stu_num; // 学号
char name[20]; // 姓名
int score; // 课程成绩
struct Node *next; // 指向下一个节点的指针
} Node;
// 合并两个链表
Node* mergeLists(Node *list1, Node *list2) {
Node *p = list1;
while (p->next != NULL) {
p = p->next;
}
p->next = list2;
return list1;
}
int main() {
// 定义链表节点
Node *head1 = (Node*)malloc(sizeof(Node));
Node *node1_1 = (Node*)malloc(sizeof(Node));
Node *node1_2 = (Node*)malloc(sizeof(Node));
Node *head2 = (Node*)malloc(sizeof(Node));
Node *node2_1 = (Node*)malloc(sizeof(Node));
Node *node2_2 = (Node*)malloc(sizeof(Node));
// 初始化链表节点信息
head1->stu_num = 0;
node1_1->stu_num = 1001;
node1_2->stu_num = 1002;
strcpy(head1->name, "");
strcpy(node1_1->name, "John");
strcpy(node1_2->name, "Mike");
head1->score = 0;
node1_1->score = 80;
node1_2->score = 90;
head2->stu_num = 0;
node2_1->stu_num = 1003;
node2_2->stu_num = 1004;
strcpy(head2->name, "");
strcpy(node2_1->name, "Lucy");
strcpy(node2_2->name, "Mary");
head2->score = 0;
node2_1->score = 85;
node2_2->score = 95;
// 将节点连接成链表
head1->next = node1_1;
node1_1->next = node1_2;
node1_2->next = NULL;
head2->next = node2_1;
node2_1->next = node2_2;
node2_2->next = NULL;
// 合并两个链表
Node *mergedList = mergeLists(head1, head2);
// 遍历合并后的链表并输出节点信息
Node *p = mergedList->next;
while (p != NULL) {
printf("%d %s %d\n", p->stu_num, p->name, p->score);
p = p->next;
}
return 0;
}
```
该代码中首先定义了链表节点结构体,包含三个信息:学号、姓名和课程成绩,以及一个指向下一个节点的指针。然后定义了两个链表,并将节点连接成链表。接着定义了一个函数 `mergeLists`,用于合并两个链表。最后遍历合并后的链表并输出节点信息。
阅读全文