版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/peng_apple/article/details/79613466
创建方式:
顺序创建(新加入的放在尾部)、逆序创建(新加入的放在头部)
1、顺序创建:
两种情况:
当链表为空时,将链表头直接指向新加入的节点及第一个节点;当链表不为空时,首先遍历链表找到链表尾节点,然后将新加入的点挂在尾部。
2、逆序创建:
两种情况:
当链表为空时,将链表头直接指向新加入的节点及第一个节点;
当链表不为空时,首先将之前的第一个链表节点挂接到新插入的节点上 ,然后将链表头指向新插入的节点。
demo:#include <stdio.h> #include <string.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) { STU *p_mov = NULL; //定义p_mov节点指针用于遍历 p_mov = *p_head; if(NULL == *p_head) {//当第一次加入链表为空时,head执行p_new *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(int argc, char *argv[]) { STU *head, *p_new = NULL; int num, i = 0; printf("请输入链表初始个数:\n"); scanf("%d", &num); for(i=0; i<num; i++) { p_new = (STU *)malloc(sizeof(STU)); printf("请输入学号、分数、名字:\n"); //给新节点赋值 scanf("%d %d %s",&p_new->num,&p_new->score,p_new->name); link_creat_head(&head,p_new); //将新节点加入链表 //free(p_new);//不能释放! } return 0; }