C语言编写一个链表

以下是C语言编写一个链表的完整攻略:

概述

链表是一种基本数据结构,它是由一系列不连续的节点组成的。每个节点包含两部分,一部分是数据,一部分是指向下一个节点的指针。链表中的数据可以是任何类型的,如int、char、结构体等。链表有单向链表和双向链表两种类型,本文主要介绍单向链表。

相关操作

链表的基本操作包括插入、删除、查找等。下面介绍单向链表的几个基本操作:

链表节点的定义

typedef struct _ListNode
{
    int val;
    struct _ListNode* next;
}ListNode;

链表节点包含两部分,一部分是节点的值,另一部分是指向下一个节点的指针。

在链表头插入一个节点

ListNode* addAtHead(ListNode* head, int val)
{
    ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
    newNode->val = val;
    newNode->next = head;
    return newNode;
}

上述函数实现在链表头插入一个节点。

在链表尾插入一个节点

ListNode* addAtTail(ListNode* head, int val)
{
    ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
    newNode->val = val;
    newNode->next = NULL; 

    if (head == NULL) return newNode;

    ListNode* cur = head;
    while (cur->next != NULL) {
        cur = cur->next;
    }
    cur->next = newNode;
    return head;
}

上述函数实现在链表尾插入一个节点。

删除链表中第一个值为给定值的节点

ListNode* deleteNode(ListNode* head, int val)
{
    if (head == NULL) return NULL;
    if (head->val == val) return head->next;

    ListNode* cur = head;
    while (cur->next != NULL && cur->next->val != val) {
        cur = cur->next;
    }
    if (cur->next != NULL) {
        cur->next = cur->next->next;
    }
    return head;
}

上述函数实现删除链表中第一个值为给定值的节点。

示例

下面给出两个示例:

示例1

输入:head = [1,2,3,4,5], val = 3
输出:[1,2,4,5]

ListNode* head = NULL;
head = addAtTail(head, 1);
head = addAtTail(head, 2);
head = addAtTail(head, 3);
head = addAtTail(head, 4);
head = addAtTail(head, 5);

printList(head);
head = deleteNode(head, 3);
printList(head);

示例2

输入:head = [1,2,3,4,5], val = 6
输出:[1,2,3,4,5]

ListNode* head = NULL;
head = addAtTail(head, 1);
head = addAtTail(head, 2);
head = addAtTail(head, 3);
head = addAtTail(head, 4);
head = addAtTail(head, 5);

printList(head);
head = deleteNode(head, 6);
printList(head);

总结

本文介绍了C语言编写一个链表的基本操作,包括链表节点的定义、在链表头插入一个节点、在链表尾插入一个节点、删除链表中第一个值为给定值的节点等。同时给出了两个示例。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言编写一个链表 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • 【python基础】python开启gpu加速

    【Python基础】Python开启GPU加速 在进行深度学习等计算密集型任务时,GPU加速能够显著提升计算速度。而Python作为一门广泛应用于机器学习、人工智能等领域的编程语言,在开启GPU加速上也具有很好的支持。 GPU加速的优势 相比于传统的CPU,GPU(图形处理器)在处理相同的计算任务时具有明显的优势。GPU在处理图形运算时,能够以比CPU更快的…

    其他 2023年3月29日
    00
  • iframe-https页面内的httpsiframe无法正常工作

    iframe-https页面内的https iframe无法正常工作攻略 在Web开发中,我们经常使用iframe来嵌入其他网站的内容。但是,在某些情况下,当我们在HTTPS页面中嵌入HTTPS的iframe时,可能会到无法正常工作的问题。在攻略中,我们将介绍这个的原因,并提供一些解决方案和示例。 原因 HTTPS页面中嵌入HTTPS的iframe无法正常工…

    other 2023年5月9日
    00
  • Lua教程(十四):字符串库详解

    Lua教程(十四):字符串库详解 1. 简介 Lua字符串库提供了丰富的字符串操作函数,包括格式化输出、字符串查找和替换、字符串截取和连接等。本教程将详细讲解字符串库中主要的函数用法,并给出代码示例作为说明。 2. 字符串格式化 字符串格式化是在输出时将一些变量插入到固定文本中,通常用于调试或显示结果。Lua中的字符串格式化函数为string.format(…

    other 2023年6月20日
    00
  • 笔记本电脑设置网络连接优先级方法步骤介绍

    笔记本电脑设置网络连接优先级方法步骤介绍 1. 打开网络连接设置 首先,我们需要打开网络连接设置界面来修改网络连接的优先级。可以按照以下步骤进行操作: 打开控制面板。 在控制面板中,点击“网络和Internet”选项。 点击“网络和共享中心”。 在左侧面板中,点击“更改适配器设置”。 这将打开一个窗口,显示所有可用的网络连接。 2. 调整网络连接优先级 一旦…

    other 2023年6月28日
    00
  • Win11 21h2更新补丁 KB5027223(22000.2057)六月累积更新推送(附完整更新日志)

    Win11 21h2更新补丁 KB5027223(22000.2057)六月累积更新推送攻略 1. 简介 Win11 21h2更新补丁 KB5027223(22000.2057)是微软在六月份发布的累积更新补丁,旨在提供系统的稳定性和安全性改进。本攻略将详细介绍如何安装和应用该更新补丁,并附上完整的更新日志。 2. 安装更新补丁 按照以下步骤安装Win11 …

    other 2023年8月3日
    00
  • es批量更新与新增(elasticsearch)

    Elasticsearch批量更新与新增攻略 Elasticsearch是一个开源的分布式搜索和分析引擎,可以帮助我们快速地存储、搜索和分析大量数据。本攻略将介绍如何使用Elasticsearch进行批量更新和新增操作。 步骤一:准备数据 在进行批量更新和新增操作之前,我们需要准备好要更新或新增的数据。以下是一个示例,展示了如何使用Python生成一些测试数…

    other 2023年5月9日
    00
  • PyQt5 在QListWidget自定义Item的操作

    让我们来详细讲解一下,“PyQt5 在QListWidget自定义Item的操作”的完整攻略。 总体思路 在QListWidget中,每一个item都是一个QListWidgetItem对象。如果我们想要对item做一些自定义的操作,比如添加一些按钮,那么我们需要自定义一个QListWidgetItem类,并将其与一个QWidget相关联。当我们在QList…

    other 2023年6月25日
    00
  • 如何基于js管理大文件上传及断点续传详析

    如何基于JS管理大文件上传及断点续传是一个比较庞杂的话题,需要分多个方面进行分析和探讨。以下是一个基本的攻略。 1. 了解大文件上传的基本概念 在进行大文件上传前,必须要了解一些基本概念,例如分片上传、断点续传、上传速度控制等。可以参考一些知名的开源库或者API,例如:- WebUploader:京东前端开源的大文件上传组件,支持分片上传、断点续传等功能。-…

    other 2023年6月26日
    00
合作推广
合作推广
分享本页
返回顶部