首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

用C语言实现链表中的节点

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

C语言是一种广泛使用的编程语言,适用于系统级编程和嵌入式开发。下面是用C语言实现链表中的节点的示例代码:

代码语言:txt
复制
#include <stdio.h>
#include <stdlib.h>

// 定义链表节点结构
struct Node {
    int data;
    struct Node* next;
};

// 创建新节点
struct Node* createNode(int data) {
    struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
    if (newNode == NULL) {
        printf("内存分配失败\n");
        exit(1);
    }
    newNode->data = data;
    newNode->next = NULL;
    return newNode;
}

// 在链表末尾插入节点
void insertAtEnd(struct Node** head, int data) {
    struct Node* newNode = createNode(data);
    if (*head == NULL) {
        *head = newNode;
    } else {
        struct Node* current = *head;
        while (current->next != NULL) {
            current = current->next;
        }
        current->next = newNode;
    }
}

// 打印链表
void printList(struct Node* head) {
    struct Node* current = head;
    while (current != NULL) {
        printf("%d ", current->data);
        current = current->next;
    }
    printf("\n");
}

int main() {
    struct Node* head = NULL;

    // 在链表末尾插入节点
    insertAtEnd(&head, 1);
    insertAtEnd(&head, 2);
    insertAtEnd(&head, 3);

    // 打印链表
    printList(head);

    return 0;
}

这段代码实现了一个简单的链表,包括创建节点、在链表末尾插入节点和打印链表的功能。通过调用insertAtEnd函数,可以向链表中插入新的节点。最后,调用printList函数可以打印链表中的所有节点。

链表的优势在于可以动态地分配内存,灵活地插入和删除节点。它适用于需要频繁插入和删除元素的场景,例如实现队列、栈、图等数据结构。

腾讯云提供了多种云计算相关产品,例如云服务器、云数据库、云存储等。具体的产品介绍和链接地址可以在腾讯云官方网站上查找。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C语言链表实现

我尝试用最简单语言与代码来描述链表,事实上它本身也很简单 静态单链表实现 下面一部分讨论都将围绕上面这幅图片展开,既然是逐步实现,我不考虑在开头就让这个单链表完美实现,它将只有两个部分:链表创建...因为我们可能还要利用head进行其他操作,如果直接head进行下面的操作,就意味着head指向位置已经改变了 while(print_ptr!...("pause"); } 上面就完成了使用尾插法创建一个链表及其简单操作包括创建/输出/插入/删除,不过如你所见它也存在许多不足,比如命名拙计,new后没有delete,以及全部在main执行没有考虑使用函数等等缺陷...这个疑问你可以自己解答比较好 动态单链表实现 到这里一个简单链表就已经实现了,但是我们还需要继续改进,因为我们有时候不知道每个节点储存数据,所以我们就需要一个动态链表了,下面这个将实现把用户输入数据以链式结构储存...; node *tail=c; a->data=9; a->next=b; a->pre=NULL; b->data=17; b->next=c; b->pre=a; c->data

5.4K30

C语言】Leetcode 876. 链表中间节点

题目 通过题目的要求可以判断出有两种示例要解决,一种是偶数节点链表,一种是奇数节点链表,应对这两种情况我们需要使程序对二者都可以兼容。...我们可以快慢指针思想来进行查找,定义一个慢指针,再定义一个是慢指针速度二倍快指针,这样的话当快指针到最后位置时候慢指针指向就是中间节点了。...但是在查找时候还要同时解决上面提到两种情况: ①奇数链表 从两个指针初始开始研究,当前两个指针都处在第一个节点位置,然后我们开始移动。...可以发现,在奇数数量节点链表,当fast到达最后一个节点时候slow刚好指向了中间节点。这样就完成了查找中间节点目的,该遍历循环条件是fast -> next !...因为是偶数链表,所以需要查找到中间节点位置是中间两个节点第二个,当循环后发现,当fast到达NULL时候slow指向才是中间第二个节点,所以该情况循环条件为fast != NULL。

12110
  • 单向链表之删除节点C语言实现)「建议收藏」

    大家好,又见面了,我是你们朋友全栈君。 链表创建查看 删除节点就是将某一节点从链摘除。 将待删节点与其前一节点解除联系(中间或尾部)或本阶段删除(头节点),并释放相应空间(free)。...删除第一步是找到要删除节点,同链表查找,如果找不到或链表为空,提示未找到,找到后根据情况删除此节点。删除节点两种情况:第一个节点,后面节点。...步骤: 1、链表为空:不用删除 2、链表不为空:先循环找要删除节点 1)找到了 1>找到节点是头节点 被删除节点是第一个节点:只需使head指向第二个节点即可 2>找到节点是普通节点...被删节点不是第一个节点:使被删节点前一节点指向被删节点后一节点即可 2)没找到 结构体节点: typedef struct student { int num;...(STU **p_head,char *name) { STU * pb,*pf; pb=*p_head;//让pb指向头节点 if(*p_head == NULL)//链表为空链表

    2.4K10

    c语言 | 单链表实现

    今天分享是单链表。准确说,单链表不算是C语言内容,而是属于数据结构内容,因为它没有新知识点,只是利用了结构体和指针等知识。...但是它在C语言中应用还是很广泛,在RTOS,也是非常多地方使用到了链表。今天暂时说一下单链表实现和简单应用,下一节当中再介绍双链表。 首先,要对单链表有个概念。...链表是由一个个节点构成,每个节点之间指针方式连接起来,有一个头指针用来找到链表第一个节点,然后根据指针就可以找到每一个节点。...说明:在本次实验,使用是vscode编辑器,编译环境是gcc,不建议使用VC6.0,因为VC6.0使用c语言标准太老了,很多语法都不支持,并且,VC6.0使用体验极差,没有代码高亮功能等等。...另外,还需要注意是删除节点之后最好释放内存,避免内存泄漏。 简单理解就是先遍历,然后找数据,找到就改变“连线”。 五、逆序 链表逆序就是将链表数据颠倒一下。

    2.1K30

    删除链表节点

    题目描述 难度级别:简单 请编写一个函数,使其可以删除某个链表给定(非末尾)节点。传入函数唯一参数为 要被删除节点 。...示例 2: 输入:head = [4,5,1,9], node = 1 输出:[4,5,9] 解释:给定你链表中值为 1 第三个节点,那么在调用了你函数之后,该链表应变为 4 -> 5 -> 9....提示: 链表至少包含两个节点链表中所有节点值都是唯一。 给定节点为非末尾节点并且一定是链表一个有效节点。 不要从你函数返回任何结果。...解题思路 题目中待传递给当前函数实参node,它是链表某一个待删除节点,然后从链表删除这个节点。...这里因为待传入实参没有完整链表,所以无法获取到之前节点,所以无法修改前一个节点next指向。这时需要是将要删除节点值替换为它下一个节点值,之后要删除这个节点next指向为下下一项。

    2.4K00

    C语言链表使用及链表实现原理

    链表是什么? 1.逻辑结构上⼀个挨⼀个数据,在实际存储时,并没有像顺序表那样也相互紧挨着。恰恰相 反,数据随机分布在内存各个位置,这种存储结构称为线性表链式存储。...下面是一个单链表实现过程 #include #include #include //结构体是⼀种⼯具,⽤这个⼯具可以定义⾃⼰数据类型 typedef struct...⼀个学⽣,即学⽣单链表头结点 Node *head = NULL; void printfNode() //遍历元素...,并不知道怎么去访问这个数据 if(head == NULL) { head = node; //一开始没有任何节点,那么传入节点作为头结点 } else {...=NULL) //,获取最后一个节点位置,跳出循环那时候是最后一个节点,判断后继节点是否为空 { p = p->pNext; } p->pNext=node; //下一个指针域指向新节点

    99410

    C语言建个单向链表

    任务描述 建立一个带头结点单向链表。 相关知识 什么是链表链表和二叉树是C语言数据结构基础和核心。...单链表 单向链表(单链表)是链表一种,其特点是链表链接方向是单向,对链表访问要通过顺序读取从头部开始,链表是使用指针进行构造列表,又称为结点列表,因为链表是由一个个结点组装起来,其中每个结点都有指针成员变量指向列表下一个结点...链表是结构、指针相结合一种应用,它是由头、中间、尾多个链环组成单方向可伸缩链表,链表链环我们称之为结点; 每个结点数据可用一个结构体表示,该结构体由两部分成员组成:数据成员与结构指针变量成员...申请动态分配一个存储空间表示形式为: (struct note*)malloc(sizeof(struct note)) 链表建立 在链表建立过程,首先要建立第一个结点,然后不断地在其尾部增加新结点...struct note *p,*p1,*head; head:用来标志链表头; p:在链表建立过程,p总是不断先接受系统动态分配新结点地址。 p1->next:存储新结点地址。

    1.2K60

    基于Python和C++实现删除链表节点

    给定单向链表头指针和一个要删除节点值,定义一个函数删除该节点。 返回删除后链表节点。...示例 1: 输入: head = [4,5,1,9], val = 5 输出: [4,1,9] 解释: 给定你链表中值为 5 第二个节点,那么在调用了你函数之后,该链表应变为 4 – 1 –...示例 2: 输入: head = [4,5,1,9], val = 1 输出: [4,5,9] 解释: 给定你链表中值为 1 第三个节点,那么在调用了你函数之后,该链表应变为 4 – 5 –...思路:   建立一个空节点作为哨兵节点,可以把首尾等特殊情况一般化,且方便返回结果,使用双指针将更加方便操作链表。...postPtr.next break prePtr = prePtr.next postPtr = postPtr.next return tempHead.next C+

    70731

    C语言实现链表

    文章目录 单链表常规操作 定义单链表结构体 构造单链表 头插法实现 尾插法实现链表头尾插法详解 单链表判空 计算单链表长度 遍历单链表链表头、尾插法构造效果 单链表指定位置插入结点 单链表指定位置删除结点...数据域 data 用来存放具体数据。 地址域 next 用来存放下一个节点位置。...删除第二个位置节点链表:head --> 2 --> 6 按址求值 /* * 根据指定位置求结点值(没有找到返回 0 ) * list 单链表 * pos 结点位置(逻辑位置(1,2,3.../* * 去除单链表重复值(重复值只保留一个) * list 单链表 * 返回值:对单链表进行了去重操作返回 1,否则返回 0 */ int RemoveRepeat(LinkList...():5 Travel():2 4 8 6 12 源代码 源代码已上传到 GitHub Data-Structure-of-C,欢迎大家下载 C语言实现数据结构

    1.9K41

    C语言链表详解_c语言链表使用

    链表可以动态进行存储分配,也就是说,链表是一个功能极为强大数组,他可以在节点中定义多种数据类型,还可以根据需要随意增添,删除,插入节点链表都有一个头指针,一般以head来表示,存放是一个地址。...链表节点分为两类,头结点和一般节点,头结点是没有数据域链表每个节点都分为两部分,一个数据域,一个是指针域。...,因为这样定义结构体变量时,我们就可以直接可以LinkList *a;定义结构体类型变量了。...下面是一个传入链表和要修改节点,来修改值函数。...= NULL) { in->next = t->next; free(t); } else { puts("节点不存在"); } } 插入链表节点 我们可以看出来,插入节点就是插入前节点指针域链接上插入节点数据域

    4.2K10

    leetcode - 交换链表节点

    题意 给你链表节点 head 和一个整数 k 。 交换 链表正数第 k 个节点和倒数第 k 个节点值后,返回链表节点链表 从 1 开始索引)。 示例 示例 1: ?...k = 1 输出:[1] 示例 4: 输入:head = [1,2], k = 1 输出:[2,1] 示例 5: 输入:head = [1,2,3], k = 2 输出:[1,2,3] 提示 链表节点数目是...就是我把所以 val 值取出来转数组,在 js ,单纯同类型数组,它在内存是连续,所以其访问复杂度是 O(1),所以我们把生成数组第(k - 1)个 和 数组长度减去 k 那位交换。...最后我们构造一个新链表返回,当然啦,后面笔者比较菜用了两次遍历去构造这个链表然后返回。...const res = swapNodes(res_before[0], 2); expect(res).toEqual(res_after[0]); }); }); 思考 请读者思考,楼上提到常规解法去求解

    78820

    237 删除链表节点

    01 题目信息 题目地址: https://leetcode-cn.com/problems/delete-node-in-a-linked-list/ 请编写一个函数,使其可以删除某个链表给定(非末尾...提示: 链表至少包含两个节点链表中所有节点值都是唯一。 给定节点为非末尾节点并且一定是链表一个有效节点。 不要从你函数返回任何结果。...链表是物理存储单元上非连续、非顺序存储结构,数据元素逻辑顺序是通过链表指针地址实现,有一系列结点(地址)组成,结点可动态生成,也就是包含值与模拟指针(引用)。大概如下: ?...x) { val = x; } } 现在它传一条链表一个节点,删除这个节点。...因为一个节点信息只有自己值以及下个节点。所以传入一个节点是看不到整个链表。也就是说我们只能拿到部分链就是传入节点之后5--->1--->9。

    1.3K10

    删除链表重复节点.

    前言 在一个排序链表,存在重复节点,如何删除链表重复节点并返回删除后链表头指针?例如:1->2->3->3->4->4->5,处理后为: 1->2->5。...本文将分享这个问题解决思路与实现代码,欢迎各位感兴趣开发者阅读本文。 常规思路 根据题意,我们可以知道链表元素是排好序。如果节点重复的话,当前节点一定与下一个节点相同。...大体思路有了,我们来梳理下实现思路: 首先,我们需要在链表节点之前再创建一个节点将它命名为head,用于处理第一个节点与第二节点相同情况。...20220226224625702 实现代码 接下来,我们将上述思路转换为代码,如下所示: /** * 删除链表重复节点 * @param pHead 链表节点 */ deleteDuplicatesNode...* * 删除链表重复节点(递归解法) * @param pHead 链表节点 */ deleteDuplicatesNodeForRecursion(pHead: ListNode

    2.8K40
    领券