不知道怎么完成下面这个实验,没有学习过相关知识

【实验1】
建立一个链表(带头结点),每个结点包括:学号,姓名,年龄,分数。输入时以学号-1结束,
然后输出该链表每个元素的值


【实验2】
对于实验1建立的链表,输入一个学生信息,然后插入到链表最后。输出链表值。

【实验3】
对于实验1建立的链表,输入一个年龄,如果链表中结点所包含的年龄等于此年龄,则将此结点删除。输出链表的值
提示:首先让p指向头结点,r指向第1个结点,然后判断r中的年龄是否与输入年龄相等,如果不相等,p和r同时向后移动,然后继续判断


没有学习相关知识,在网上找到的相关代码也不知道如何运行,与网上相似题目 的要求也不同,不知道该怎么改动

>没有学习相关知识,

请问你学过什么知识呢? struct,指针,数组 学过么? 你具体的困难是在哪里?

# include "stdio.h" 
# include "stdlib.h"
typedef struct node
{
    int sid;
    char name[20];
    int score; 
    int age;
    struct node* next;
}node;

node *creatlink(int n);
void panduan(int ag, node* a);
void printlink(node *a);

int main()
{
    node* a = creatlink(6);
    printf("未删除前:\n");
    printlink(a);
    int ag;
    printf("请输入一个要删除的年龄:\n") ;
    scanf("%d",&ag);
    panduan(ag, a);
    printf("删除后:\n");
    printlink(a);
    return 0;
}
node *creatlink(int n)
{
    node* p = (node*)malloc(sizeof(node));
    node* p2 = NULL;
    while(n--)
    {
        node* q = (node*)malloc(sizeof(node));
        printf("请输入节点内容(学号 姓名 分数 年龄):\n");
        scanf("%d %s %d %d", &q->sid, q->name, &q->score, &q->age); 
        if (p2 == NULL)
        {
            p->next = q;
            p2 = q;
        }
        else
        {
            p2->next = q;
            p2 = q;
        }
    }
    p2->next = NULL;
    
    return p;
}

void panduan(int ag, node* a)
{
    node* q = NULL;
    node* qfront = NULL;
    for (q = a->next, qfront = a; q!= NULL;)
    {
        if (q->age == ag)
        {
            qfront->next = q->next;
            node* t = q;
            free(t);
            q = q->next;
        }
        else
        {
            q = q->next;
            qfront = qfront->next;
        }
    }
}
void printlink(node* a)
{
    node* p = NULL;
    for (p = a->next; p != NULL; p = p->next)
    {
        printf("%d %s %d %d\n", p->sid, p->name, p->score, p->age);
        
    }
 } 

就比如我查到的这个代码,我输入1 小明 55 15

                                                      2 小红 56 16

输入完学生信息后,不知道如何停止输入学生信息,不知道如何输入年龄来完成删除对应年龄的学生信息。目前只学过循环,指针和结构体刚开始涉及

不好意思,刚看懂点这个代码要求输入6个学生的信息,那我想无限输入,最后以-1结尾该怎么修改。附上我的题目的要求:

{建立一个链表(带头结点),每个结点包括:学号,姓名,年龄,分数。输入时以学号-1结束,

然后输出该链表每个元素的值}


#include <stdio.h>
#include <stdlib.h>
typedef struct stu{
   int num;
   char name[10];
   char sex;
   int age;
   struct stu *next;
}STU,*STUP;    //声明一个结构体,里面包含学号、姓名、性别、年龄,还该结构体指针。
#define LEN sizeof(STU)
int main()
{
 STUP head;
 STUP creat(void);  //建立链表函数。
 STUP delet(STUP head,int age_temp);//删除要求年龄函数。
 void print(STUP head);//输出链表函数
int age_temp;
 printf("请输入学号、姓名、性别、年龄:\n");
 head=creat();
 print(head);
printf("请输入要删除的年龄:\n");
scanf("%d",&age_temp);
head=delet(head,age_temp);
printf("输出删除后的信息:\n");
print(head);
}
STUP creat(void)  //建立链表函数
{
  STUP p1,p2,head;
  int n=0;
  p1=p2=(STUP)malloc(LEN);
  head=NULL;
  scanf("%d %s %c %d\n",&p1->num,p1->name,&p1->sex,&p1->age);
  while(p1->num!=0)
  {
   n=n+1;
   if(n==1)
    head=p1;
   else p2->next=p1;
   p2=p1;
   p1=(STUP)malloc(LEN);
  scanf("%d %s %c %d\n",&p1->num,p1->name,&p1->sex,&p1->age);
  }
  p2->next=NULL;
  return head;
 
}
void print(STUP head) //输出链表函数
{
  STUP p;
  p=head;
  if(head!=NULL)
  do{
    printf("%5d %7s %4c %5d\n",p->num,p->name,p->sex,p->age);
    p=p->next;
  }while(p!=NULL);
 
}
STUP delet(STUP head,int age_temp)  //删除要求年龄函数
{
 STUP h,p;
 h=(STUP)malloc(LEN); //创建一个空结点
 h->next=head;
  head=h;
 for(p=head;p->next!=NULL;p=p->next)
  if(p->next->age==age_temp)
    p->next=p->next->next;
    head=head->next;
   return head;
}

这个代码也不知道如何正确输入,望告知,谢谢