1.链表的创建
![](https://i-blog.csdnimg.cn/blog_migrate/095a7f2ca73bcde16c1210a547c20d0f.png)
2.代码实现
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
//定义节点结构体
typedef struct student
{
//数据域
int num; //学号
int score; //分数
char name[20]; //名字
//指针域
struct student *next;
} STU;
void link_creat_head(STU **p_head, STU *p_new)
{
assert(p_new);
STU *p_mov = *p_head;
//当第一次加入链表为空时,head执行p_new
if (*p_head == NULL)
{
*p_head = p_new;
p_new->next = NULL;
}
else
{
//第二次以后加入链表
while (p_mov->next != NULL)
{
//找到原来链表的最后一个节点
p_mov = p_mov->next;
}
//将新申请的节点加入链表
p_mov->next = p_new;
p_new->next = NULL;
}
}
int main()
{
STU *head = NULL;
STU *p_new = NULL;
int num = 0;
printf("请输入链表初始个数:");
scanf("%d", &num);
for (int i = 0; i < num; i++)
{
//申请一个新的节点空间
p_new = (STU *) malloc(sizeof(STU));
//判断是否malloc失败
if (p_new == NULL)
{
perror("p_new");
return 1;
}
//给新节点赋值
printf("请输入学号、名字、分数:");
scanf("%d %s %d", &p_new->num, &p_new->name, &p_new->score);
//将新节点加入链表
link_creat_head(&head, p_new);
}
//释放空间1
free(p_new);
p_new = NULL;
}