在C语言中向链接列表添加节点

yizhihongxing

下面是在C语言中向链接列表添加节点的完整使用攻略。

什么是链接列表

链接列表(Linked List)是由多个节点组成的数据结构,每个节点包含一个数据元素和指向下一个节点的指针。

链接列表的优点是可以高效地插入和删除节点,而且不需要预先知道列表的大小。但缺点是访问任意一个节点的时间复杂度为O(n),不如数组高效。

如何向链接列表添加节点

首先,我们需要定义节点的结构体类型,结构体包含数据和指针两个成员变量:

struct node {
    int data;
    struct node *next;
};

其中,data表示节点存储的数据,next表示指向下一个节点的指针。

添加一个空的链接列表

要向链接列表中添加节点,需要首先创建一个空的链表,即链表中没有任何节点。

struct node *head = NULL;

其中,head表示链表的头部节点,初始值为NULL。

向链表中添加节点

在链表头部添加节点

要在链表头部添加一个新节点,在新节点中存储数据,将原有的头部节点变为新节点的下一个节点,最后将新节点作为链表的新头部节点。

struct node *new_node = (struct node*)malloc(sizeof(struct node));
new_node->data = 10; // 存储数据
new_node->next = head; // 新节点的下一个节点是原有的头部节点
head = new_node; // 新节点成为新的头部节点

在链表尾部添加节点

要在链表尾部添加一个新节点,先遍历到链表的末尾,将新节点作为最后一个节点的下一个节点。

struct node *new_node = (struct node*)malloc(sizeof(struct node));
new_node->data = 20; // 存储数据
new_node->next = NULL; // 新节点为最后一个节点,所以指向NULL

if (head == NULL) { // 链表为空,新节点成为头部节点
    head = new_node;
} else { // 链表不为空,遍历到末尾
    struct node *last = head;
    while (last->next != NULL) {
        last = last->next;
    }
    last->next = new_node; // 将新节点作为最后一个节点的下一个节点
}

示例说明

示例一:向链表头部添加节点

#include <stdio.h>
#include <stdlib.h>
struct node {
    int data;
    struct node *next;
};

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

    // 在头部添加节点
    struct node *new_node1 = (struct node*)malloc(sizeof(struct node));
    new_node1->data = 10;
    new_node1->next = head;
    head = new_node1;

    struct node *new_node2 = (struct node*)malloc(sizeof(struct node));
    new_node2->data = 20;
    new_node2->next = head;
    head = new_node2;

    // 遍历所有节点
    struct node *current = head;
    while (current != NULL) {
        printf("%d\n", current->data);
        current = current->next;
    }

    return 0;
}

输出结果为:

20
10

示例二:向链表尾部添加节点

#include <stdio.h>
#include <stdlib.h>
struct node {
    int data;
    struct node *next;
};

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

    // 在尾部添加节点
    struct node *new_node1 = (struct node*)malloc(sizeof(struct node));
    new_node1->data = 10;
    new_node1->next = NULL;
    head = new_node1;

    struct node *new_node2 = (struct node*)malloc(sizeof(struct node));
    new_node2->data = 20;
    new_node2->next = NULL;

    if (head == NULL) {
        head = new_node2;
    } else {
        struct node *current = head;
        while (current->next != NULL) {
            current = current->next;
        }
        current->next = new_node2;
    }

    // 遍历所有节点
    struct node *current = head;
    while (current != NULL) {
        printf("%d\n", current->data);
        current = current->next;
    }

    return 0;
}

输出结果为:

10
20

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:在C语言中向链接列表添加节点 - Python技术站

(0)
上一篇 2023年5月9日
下一篇 2023年5月9日

相关文章

  • 详解Qt如何加载libxl库

    下面是详解Qt如何加载libxl库的完整攻略: 步骤一:下载libxl库并安装 libxl是一款用于读写Excel文件的C++库。我们首先需要下载libxl库并进行安装。在官网http://www.libxl.com/download.html下载对应版本的库,然后解压至指定目录。 步骤二:在Qt项目中添加libxl库 在Qt项目中,我们可以通过.pro文件…

    C 2023年5月23日
    00
  • 详解iOS中多线程app开发的GCD队列的使用

    详解iOS中多线程app开发的GCD队列的使用攻略 什么是GCD队列? GCD(Grand Central Dispatch)是苹果公司提供的一套多线程解决方案,它可以用来实现iOS app中的并发操作。其中的“Dispatch”意味着将一个任务(也就是代码块)分配到某个线程上执行。一般情况下,GCD队列包含两种类型:串行队列和并发队列。 串行队列(Seri…

    C 2023年5月22日
    00
  • 用纯C语言实现贪吃蛇游戏

    用C语言实现贪吃蛇游戏 1. 设计思路 贪吃蛇游戏是一个老少皆宜的经典游戏,其基本原理是通过操纵方向键控制一条蛇在一个固定大小的游戏窗口中移动,蛇的长度不断增长,直至最后碰到游戏窗口边缘或者自身。游戏的难度在于蛇不可以穿墙而且一碰到边缘或自身就死亡。下面我们讲一下用C语言实现贪吃蛇游戏的完整攻略。 1.1 思路概述 程序主要分为两个部分:逻辑实现和界面实现。…

    C 2023年5月23日
    00
  • C++之CWnd窗口框架实例

    下面详细讲解一下“C++之CWnd窗口框架实例”的完整攻略。 C++之CWnd窗口框架实例 简介 CWnd是MFC框架中的一个基类,用于创建窗口。它具有以下特点: 可以接收和处理系统消息,如鼠标消息、键盘消息等; 可以在上面绘制图形; 可以在其上创建子控件等; 创建窗口 创建CWnd窗口的方法如下: BOOL CWnd::Create( LPCTSTR lp…

    C 2023年5月24日
    00
  • 高级前端面试手写扁平数据结构转Tree

    针对“高级前端面试手写扁平数据结构转Tree”的完整攻略,我会从以下几个方面进行讲解: 数据结构:一些常见的扁平数据结构类型及其特点 Tree结构:解释Tree结构及其作用 将扁平数据结构转换为Tree结构的思路和方法 代码示例:提供两个转换示例 数据结构 在前端开发中,我们常见到的扁平数据结构类型主要包括对象数组和 JSON 数组两大类型。这两种类型都有共…

    C 2023年5月23日
    00
  • C语言 解压华为固件的实例代码

    下面我将详细讲解“C语言 解压华为固件的实例代码”的完整攻略。 1. 前置要求 在开始之前,我们需要先安装好以下工具: make gcc git wget 使用如下命令安装: sudo apt-get update sudo apt-get install -y make gcc git wget 2. 获取华为固件压缩包 首先,我们需要从华为的官方网站上获…

    C 2023年5月24日
    00
  • C++函数返回值为对象时,构造析构函数的执行细节

    当C++函数返回一个对象时,编译器在底层会进行以下的操作: 为返回值对象分配内存空间 调用返回值对象的构造函数,初始化该对象 调用函数的代码,修改返回值对象的状态 返回控制权到调用函数的代码 调用返回值对象的析构函数,释放内存空间 下面是一个示例代码,演示了C++函数返回值为对象的情况: class Person { private: std::string…

    C 2023年5月22日
    00
  • 详解C++中普通旧数据(POD)的使用

    详解 C++ 中普通旧数据(POD)的使用 什么是 POD 类型 C++ 中的 POD 类型代表的是“普通的旧数据”(Plain Old Data),也就是可以被赋初值、拷贝、比较和操纵的数据结构。如果一个数据结构不是 POD 类型,则它就不一定可以简单拷贝或赋值,否则很可能导致内存泄漏和 UB(未定义行为)。 POD 类型有以下三个特点: 1.它们的所有成…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部