人看的代码:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
struct Node {
char studentID[20];
int score;
struct Node* next;
};
// 插入节点到链表中,按学号升序排列
struct Node* insertNode(struct Node* head, char studentID[], int score) {
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
if (newNode == NULL) {
printf("内存分配失败\n");
exit(1);
}
strcpy(newNode->studentID, studentID);
newNode->score = score;
newNode->next = NULL;
if (head == NULL || strcmp(studentID, head->studentID) < 0) {
newNode->next = head;
return newNode;
}
struct Node* current = head;
while (current->next != NULL && strcmp(studentID, current->next->studentID) >= 0) {
current = current->next;
}
newNode->next = current->next;
current->next = newNode;
return head;
}
// 打印链表
void printList(struct Node* head) {
struct Node* current = head;
while (current != NULL) {
printf("%s %d\n", current->studentID, current->score);
current = current->next;
}
}
int main() {
int N, M; // a、b链表元素数量
printf("请输入a、b链表元素的数量 N 和 M: ");
scanf("%d %d", &N, &M);
struct Node* aHead = NULL;
struct Node* bHead = NULL;
// 输入a链表数据
printf("请输入a链表的数据(学号 成绩):\n");
for (int i = 0; i < N; i++) {
char studentID[20];
int score;
scanf("%s %d", studentID, &score);
aHead = insertNode(aHead, studentID, score);
}
// 输入b链表数据
printf("请输入b链表的数据(学号 成绩):\n");
for (int i = 0; i < M; i++) {
char studentID[20];
int score;
scanf("%s %d", studentID, &score);
bHead = insertNode(bHead, studentID, score);
}
// 合并两个链表
struct Node* mergedHead = NULL;
while (aHead != NULL || bHead != NULL) {
if (aHead == NULL || (bHead != NULL && strcmp(bHead->studentID, aHead->studentID) < 0)) {
mergedHead = insertNode(mergedHead, bHead->studentID, bHead->score);
bHead = bHead->next;
}
else {
mergedHead = insertNode(mergedHead, aHead->studentID, aHead->score);
aHead = aHead->next;
}
}
// 打印合并后的链表
printf("按学号升序排列的数据:\n");
printList(mergedHead);
// 释放内存
while (mergedHead != NULL) {
struct Node* temp = mergedHead;
mergedHead = mergedHead->next;
free(temp);
}
return 0;
}
给网站通过的代码:
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
struct Node {
char studentID[20];
int score;
struct Node* next;
};
// 插入节点到链表中,按学号升序排列
struct Node* insertNode(struct Node* head, char studentID[], int score) {
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
if (newNode == NULL) {
printf("内存分配失败\n");
exit(1);
}
strcpy(newNode->studentID, studentID);
newNode->score = score;
newNode->next = NULL;
if (head == NULL || strcmp(studentID, head->studentID) < 0) {
newNode->next = head;
return newNode;
}
struct Node* current = head;
while (current->next != NULL && strcmp(studentID, current->next->studentID) >= 0) {
current = current->next;
}
newNode->next = current->next;
current->next = newNode;
return head;
}
// 打印链表
void printList(struct Node* head) {
struct Node* current = head;
while (current != NULL) {
printf("%s %d\n", current->studentID, current->score);
current = current->next;
}
}
int main() {
int N, M; // a、b链表元素数量
//printf("请输入a、b链表元素的数量 N 和 M: ");
scanf("%d %d", &N, &M);
struct Node* aHead = NULL;
struct Node* bHead = NULL;
// 输入a链表数据
/* printf("请输入a链表的数据(学号 成绩):\n");*/
for (int i = 0; i < N; i++) {
char studentID[20];
int score;
scanf("%s %d", studentID, &score);
aHead = insertNode(aHead, studentID, score);
}
// 输入b链表数据
//printf("请输入b链表的数据(学号 成绩):\n");
for (int i = 0; i < M; i++) {
char studentID[20];
int score;
scanf("%s %d", studentID, &score);
bHead = insertNode(bHead, studentID, score);
}
// 合并两个链表
struct Node* mergedHead = NULL;
while (aHead != NULL || bHead != NULL) {
if (aHead == NULL || (bHead != NULL && strcmp(bHead->studentID, aHead->studentID) < 0)) {
mergedHead = insertNode(mergedHead, bHead->studentID, bHead->score);
bHead = bHead->next;
}
else {
mergedHead = insertNode(mergedHead, aHead->studentID, aHead->score);
aHead = aHead->next;
}
}
// 打印合并后的链表
//printf("按学号升序排列的数据:\n");
printList(mergedHead);
// 释放内存
while (mergedHead != NULL) {
struct Node* temp = mergedHead;
mergedHead = mergedHead->next;
free(temp);
}
return 0;
}