单向链表之创建添加(C语言实现)

版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
}

猜你喜欢

转载自blog.csdn.net/peng_apple/article/details/79613466