编程实现两个链表的合并然后输出。(静态链表)

C语言
已知链表节点信息为学号、姓名、课程成绩。现有两个链表分别包含三个节点。编程实现两个链表的合并然后输出。(静态链表)

这种问题已经被问了无数遍了,动动手搜索下就有

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define MAXSIZE 50

// 静态链表结构体
typedef struct Student {
    char id[10];
    char name[20];
    int grade;
} Student;

typedef struct Node {
    Student data;
    int next;
} Node;

Node list[MAXSIZE];
int length = 0;

// 初始化链表
void initList() {
    for (int i = 0; i < MAXSIZE; i++) {
        list[i].next = -1;
    }
}

// 添加节点
int addNode(Student s) {
    int index;
    for (int i = 0; i < MAXSIZE; i++) {
        if (list[i].next == -1) {
            index = i;
            break;
        }
    }
    list[index].data = s;
    list[index].next = length;
    length = index;
    return index;
}

// 合并两个链表
void mergeList(int head1, int head2) {
    int p1 = list[head1].next, p2 = list[head2].next;
    int p = addNode(list[p1].data);

    while (p1 != -1 && p2 != -1) {
        if (list[p1].data.grade > list[p2].data.grade || 
            (list[p1].data.grade == list[p2].data.grade && strcmp(list[p1].data.id, list[p2].data.id) < 0)) {
            p = addNode(list[p1].data);
            p1 = list[p1].next;
        } else {
            p = addNode(list[p2].data);
            p2 = list[p2].next;
        }
    }

    while (p1 != -1) {
        p = addNode(list[p1].data);
        p1 = list[p1].next;
    }

    while (p2 != -1) {
        p = addNode(list[p2].data);
        p2 = list[p2].next;
    }
}

// 输出链表
void printList(int head) {
    printf("head -> ");
    for (int i = list[head].next; i != -1; i = list[i].next) {
        printf("[%s, %s, %d] -> ", list[i].data.id, list[i].data.name, list[i].data.grade);
    }
    printf("NULL\n");
}

int main() {
    Student s1 = {"1001", "Tom", 90};
    Student s2 = {"1002", "Jerry", 80};
    Student s3 = {"1003", "Jack", 70};
    Student s4 = {"1004", "Lily", 85};
    Student s5 = {"1005", "Lucy", 95};
    Student s6 = {"1006", "Bob", 75};
    
    initList();
    addNode(s1);
    addNode(s2);
    addNode(s3);
    int head1 = length;

    initList();
    addNode(s4);
    addNode(s5);
    addNode(s6);
    int head2 = length;

    mergeList(head1, head2);
    printf("The merged list is: ");
    printList(length);

    return 0;
}