算法通关村第一关——链表青铜挑战记

链表是一种常见的数据结构,用于存储和组织数据。它由一系列节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针。

在本期算法通关村中我主要解答第 1 个问题

C 语言里是如何构造出链表的?
 


一、C 语言里是如何构造出链表的?

话不多说,先上代码

//定义一个链表结点
struct ListNode {
    int val; //代表数据
    struct ListNode *next; //代表指针
};

在这串代码中我们可以看到

该结构体中包含了两个成员变量:

  • val:表示当前结点所存储的数据。
  • next:表示指向下一个链表结点的指针。

那这串代码有啥用?

该代码片段的作用是定义了一个链表结点的结构,你可以使用这个结构来创建链表,

进行插入、删除、查找等链表操作。

接下来,我们就来创建链表。

举个算法村里的例子,我们创建一个值为 0 1 2 3 4 的链表

//初始化链表
struct ListNode* initLink() {

    int i;

    //1、创建头指针,初始时置为NULL,方便后面判断链表是否为空
    struct ListNode* p = NULL;

    //2、创建头结点,数据域置为0,表示该结点不存储有效数据,且指向空
    struct ListNode* temp = (struct ListNode*)malloc(sizeof(struct ListNode));
    temp->val = 0;
    temp->next = NULL;

    //头指针指向头结点,类比于数组的第一个元素
    p = temp;

    //3、每创建一个结点,都令其直接前驱结点的指针指向它,以形成链表
    for (i = 1; i < 5; i++) {
        //创建一个结点,数据域为 i
        struct ListNode* a = (struct ListNode*)malloc(sizeof(struct ListNode));
        a->val = i;
        a->next = NULL;

        //每次 temp 指向的结点就是 a 的直接前驱结点
        temp->next = a;

        //temp指向下一个结点(也就是a),为下次添加结点做准备
        temp = temp->next;
    }

    //返回头指针
    return p;
}

上面有两个地方用到了 malloc 函数可能一些初学的小伙伴会跟我一样,

不太懂 malloc 函数的作用以及它的语法。

在《大话数据结构》上作者讲的很通俗,原话是这么讲的

在这段算法代码中,我们用到了 C 语言的 malloc 函数,它的作用就是生成一个新的节点,其类型与 ListNode 是一样的,其本质就是在内存中找了一小块空地,准备用来存放数据 val 的 temp 和 a 节点。

总之,流程是这样的

创建头指针->创建头结点->接着用循环来依次创建节点,通过指针将他们连接起来。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值