逆序建立链表输出学生

输入的若干学生的信息(学号、姓名、年龄),要求使用链表完成:
根据学生的信息建立逆序链表,并遍历该链表输出学生的信息;
在第m个结点之后插入一个新学生结点并输出;
删除某个学号的学生结点后输出。
输入
首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。每组测试数据首先输入一个正整数n表示学生的个数(1≤n≤100);然后输入n行信息,分别表示学生的学号、姓名(不含空格且长度都不超过10的字符串)和年龄(正整数);接下来输入整数m(1≤m≤n)和一个新学生的学号、姓名、年龄;最后输入待删学生的学号(可能不存在,此时不需删除)。
每两组测试数据之间留一个空行。
输入
2
3
1201 Zhangsan 20
1202 Lisi 21
1204 Wangwu 20
2 1203 Zhaoliu 19
1204
2
1201 Lisi 20
1202 Wangwu 20
2 1203 Zhaoliu 19
1204
输出
1204 Wangwu 20
1202 Lisi 21
1201 Zhangsan 20
1204 Wangwu 20
1202 Lisi 21
1203 Zhaoliu 19
1201 Zhangsan 20
1202 Lisi 21
1203 Zhaoliu 19
1201 Zhangsan 20

1202 Wangwu 20
1201 Lisi 20
1202 Wangwu 20
1201 Lisi 20
1203 Zhaoliu 19
1202 Wangwu 20
1201 Lisi 20
1203 Zhaoliu 19

供参考:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct node {
    char num[10];
    char name[10];
    int  age;
    struct node* next;
}Lnode,*LinkNode;
void creatlist(LinkNode* L, int n)
{
    int i;
    LinkNode pt;
    for (i = 0; i < n; i++){
        pt = (LinkNode)malloc(sizeof(Lnode));
        pt->next = NULL;
        scanf("%s %s %d", pt->num, pt->name, &pt->age);
        pt->next = (*L);
        (*L) = pt;
    }
}
void insertlist(LinkNode L, LinkNode pt, int i, int n)
{
    int k = 0;
    if (i < 1 || i > n) return;
    LinkNode p = L;
    while (p && k < i - 1) {
        k++;
        p = p->next;
    }
    pt->next = p->next;
    p->next = pt;
}
void deletelist(LinkNode* L, char* s_num)
{
    LinkNode p = (*L), pre = NULL;
    while (p) {
        if (strcmp(p->num, s_num) == 0) {
            if (p == (*L)) {
                (*L) = p->next;
                free(p);
                p = (*L);
            }
            else {
                pre->next = p->next;
                free(p);
                p = pre;
            }
        }
        else {
            pre = p;
            p = p->next;
        }
    }
}
void printlist(LinkNode L)
{
    LinkNode p = L;
    while (p) {
        printf("%s %s %d\n", p->num, p->name, p->age);
        p = p->next;
    }
}
int main()
{
    int T, n, i;
    scanf("%d", &T);
    while (T--) {
        char num[10] = { 0 };
        LinkNode L = NULL, pt = NULL;
        scanf("%d", &n);
        creatlist(&L, n);
        pt = (LinkNode)malloc(sizeof(Lnode));
        pt->next = NULL;
        scanf("%d %s %s %d", &i, pt->num, pt->name, &pt->age);
        scanf("%s", num);
        printlist(L);
        insertlist(L, pt, i, n);
        printlist(L);
        deletelist(&L, num);
        printlist(L);
    }
    return 0;
}