全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

如何用c++实现一个链表 单链表的创建、插入和删除【数据结构】

C++单链表需定义节点结构和链表类,手动管理内存;核心操作包括头插(O(1))、指定位置插入(需遍历)、按值删除(分头/中/尾处理),并需实现析构函数防止内存泄漏。

用 C++ 实现单链表,核心是定义节点结构、管理头指针,并封装插入、删除等操作。不需要依赖 STL 容器,手动管理内存更利于理解数据结构本质。

定义节点结构和链表类

每个节点包含数据域和指向下一节点的指针;链表类维护头指针(可为 nullptr 表示空表):

struct ListNode {
    int val;
    ListNode* next;
    ListNode(int x) : val(x), next(nullptr) {}
};

class LinkedList { private: ListNode* head; public: LinkedList() : head(nullptr) {} ~LinkedList(); // 后续需实现析构释放内存 };

在链表头部插入节点(最简单)

时间复杂度 O(1),适合频繁在开头增删的场景:

  • 新建节点,赋值
  • 新节点 next 指向原 head
  • 更新 head 指向新节点
void insertAtHead(int value) {
    ListNode* newNode = new ListNode(value);
    newNode->next = head;
    head = newNode;
}

在指定位置插入(如第 i 个位置,从 0 开始)

需遍历到前一个节点,注意边界检查(i 小于 0 或超过长度时可忽略或报错):

  • i == 0 等价于头插,直接调用 insertAtHead
  • 遍历至第 i−1 个节点(prev),若 prev 为 nullptr 说明越界
  • 新建节点,接在 prev 后面:newNode→next = prev→next;prev→next = newNode
void insertAt(int index, int value) {
    if (index == 0) {
        insertAtHead(value);
        return;
    }
    ListNode* prev = head;
    for (int i = 0; i < index - 1 && prev != nullptr; ++i) {
        prev = prev->next;
    }
    if (prev == nullptr) return; // 位置无效
    ListNode* newNode = new ListNode(value);
    newNode->next = prev->next;
    prev->next = newNode;
}

删除节点(按值或按位置)

以按值删除为例(删第一个匹配的节点),需处理三种情况:

  • 空链表 → 直接返回
  • 头节点即目标 → 更新 head,并 delete 原头节点
  • 中间或尾部节点 → 找到前驱 prev,跳过目标节点,并释放内存
void deleteByValue(int value) {
    if (!head) return;
    if (head->val == value) {
        ListNode* temp = head;
        head = head->next;
        delete temp;
        return;
    }
    ListNode* prev = head;
    while (prev->next && prev->next->val != value) {
        prev = prev->next;
    }
    if (prev->next) {
        ListNode* toDelete = prev->next;
        prev->next = toDelete->next;
        delete toDelete;
    }
}

补充:遍历与析构(避免内存泄漏)

打印链表用于调试:

void print() {
    ListNode* cur = head;
    while (cur) {
        std::cout << cur->val;
        if (cur->next) std::cout << " → ";
        cur = cur->next;
    }
    std::cout << std::endl;
}

析构函数应逐个释放节点:

LinkedList::~LinkedList() {
    while (head) {
        ListNode* temp = head;
        head = head->next;
        delete temp;
    }
}

不复杂但容易忽略


# node  # c++  # 封装  # 析构函数  # 指针  # 数据结构  # delete  # 链表  # 遍历  # 第一个  # 不需要  # 下一  # 三种  # 为例  # 报错  # 最简单 


相关文章: 香港服务器网站生成指南:免费资源整合与高速稳定配置方案  制作网站的公司有哪些,做一个公司网站要多少钱?  微课制作网站有哪些,微课网怎么进?  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  ui设计制作网站有哪些,手机UI设计网址吗?  网站制作的方法有哪些,如何将自己制作的网站发布到网上?  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  小型网站建站如何选择虚拟主机?  如何通过建站之星自助学习解决操作问题?  电商平台网站制作流程,电商网站如何制作?  存储型VPS适合搭建中小型网站吗?  如何选择适配移动端的WAP自助建站平台?  建站之星×万网:智能建站系统+自助建站平台一键生成  如何快速查询域名建站关键信息?  小说建站VPS选用指南:性能对比、配置优化与建站方案解析  如何在万网开始建站?分步指南解析  如何快速查询网站的真实建站时间?  专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?  建站之星logo尺寸如何设置最合适?  定制建站模板如何实现SEO优化与智能系统配置?18字教程  赚钱网站制作软件,建一个网站怎样才能赚钱?是如何盈利的?  高防服务器租用如何选择配置与防御等级?  企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?  javascript基本数据类型及类型检测常用方法小结  建站主机选哪家性价比最高?  如何通过VPS搭建网站快速盈利?  如何高效利用200m空间完成建站?  无锡制作网站公司有哪些,无锡优八网络科技有限公司介绍?  成都网站制作公司哪家好,四川省职工服务网是做什么用?  建站之星手机一键生成:多端自适应+小程序开发快速建站指南  简单实现Android文件上传  网站建设制作、微信公众号,公明人民医院怎么在网上预约?  Swift中swift中的switch 语句  php8.4新语法match怎么用_php8.4match表达式替代switch【方法】  如何选择高效便捷的WAP商城建站系统?  建站之星伪静态规则如何设置?  广州网站建站公司选择指南:建站流程与SEO优化关键词解析  香港服务器网站卡顿?如何解决网络延迟与负载问题?  建站之星在线版空间:自助建站+智能模板一键生成方案  如何通过虚拟主机快速搭建个人网站?  如何在景安服务器上快速搭建个人网站?  如何在阿里云部署织梦网站?  建站之星Pro快速搭建教程:模板选择与功能配置指南  建站之星安装步骤有哪些常见问题?  湖南网站制作公司,湖南上善若水科技有限公司做什么的?  北京企业网站设计制作公司,北京铁路集团官方网站?  如何打造高效商业网站?建站目的决定转化率  如何通过主机屋免费建站教程十分钟搭建网站?  如何快速搭建二级域名独立网站?  如何在企业微信快速生成手机电脑官网? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。