c语言如何创建一个链表(尾插法)

本文介绍一种本人常用的较为简单,比较标准的一种创建并使用链表的方法,尾插法,直接用代码演示了
文末有完整代码
在这里插入图片描述

导入所需要的头文件

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>

创建结构体

typedef struct LNode
{
    int data;//结点的数据域
    struct LNode* next; //结点的指针域
}LNode, * List;//List为指向结构体LNode的指针类型

主函数

int main()
{
    List L;
    L = (LNode*)malloc(sizeof(LNode));//为头结点动态分配内存空间
    L->next = NULL;//头节点不储存数据
    LNode* p = L;//创建一个p指针首先指向头节点
    int data;
    while (scanf("%d", &data) != -1) {//尾插法创建链表,输入一些正整数数据,以-1代表结束
        if (data < 0)
            break;
        LNode* temp = (LNode*)malloc(sizeof(LNode));//为输入的数据节点动态分配内存空间
        //申请的是指针LNode*型,链表每个结点类型需统一
        temp->next = NULL;
        temp->data = data;
        p->next = temp;//p的next指针指向新建的节点
        p = p->next;//让p指向p的下一节点,保证它指向链表尾部
    }
    //循环结束后,链表创建完成
    p = L->next;//让p指针指向创建的链表的头指针L的next,因为头节点没有数据,所以从L->next开始
    while (p) {	//输出链表								
        printf("%d ", p->data);
        p = p->next;
     }
}

完整代码

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef struct LNode
{
    int data;//结点的数据域
    struct LNode* next; //结点的指针域
}LNode, * List;//List为指向结构体LNode的指针类型
int main()
{
    List L;
    L = (LNode*)malloc(sizeof(LNode));//为头结点动态分配内存空间
    L->next = NULL;//头节点不储存数据
    LNode* p = L;//创建一个p指针首先指向头节点
    int data;
    while (scanf("%d", &data) != -1) {//尾插法创建链表,输入一些正整数数据,以-1代表结束
        if (data < 0)
            break;
        LNode* temp = (LNode*)malloc(sizeof(LNode));//为输入的数据节点动态分配内存空间
        //申请的是指针LNode*型,链表每个结点类型需统一
        temp->next = NULL;
        temp->data = data;
        p->next = temp;//p的next指针指向新建的节点
        p = p->next;//让p指向p的下一节点,保证它指向链表尾部
    }
    //循环结束后,链表创建完成
    p = L->next;//让p指针指向创建的链表的头指针L的next,因为头节点没有数据,所以从L->next开始
    while (p) {	//输出链表								
        printf("%d ", p->data);
        p = p->next;
     }
}

测试结果
在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

.别拖至春天.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值