全网整合营销服务商

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

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

C++如何实现一个链表?(数据结构代码示例)

C++单向链表实现核心是定义含数据和next指针的ListNode结构,并用LinkedList类封装头指针及插入、遍历、删除、析构等操作,强调初始化nullptr、内存释放与指针安全。

用C++实现链表,核心是定义节点结构和管理指针。下面是一个简洁、可运行的单向链表示例,包含插入、遍历、删除等基本操作,适合初学者理解原理。

定义节点结构

每个节点包含数据和指向下一个节点的指针:

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

使用构造函数初始化,避免野指针;next 初始化为 nullptr 是关键习惯,防止未定义行为。

链表类封装(含常用操作)

把头指针和操作方法封装成类,更清晰、易复用:

class LinkedList {
private:
    ListNode* head;

public: LinkedList() : head(nullptr) {}

// 头插法插入新节点
void push_front(int val) {
    ListNode* newNode = new ListNode(val);
    newNode->next = head;
    head = newNode;
}

// 尾插法(需遍历到末尾)
void push_back(int val) {
    ListNode* newNode = new ListNode(val);
    if (!head) {
        head = newNode;
        return;
    }
    ListNode* cur = head;
    while (cur->next) cur = cur->next;
    cur->next = newNode;
}

// 遍历并打印所有值
void print() const {
    ListNode* cur = head;
    while (cur) {
        std::cout << cur->val;
        if (cur->next) std::cout << " → ";
        cur = cur->next;
    }
    std::cout << std::endl;
}

// 按值删除第一个匹配节点(注意处理头节点)
void remove(int val) {
    if (!head) return;
    if (head->val == val) {
        ListNode* tmp = head;
        head = head->next;
        delete tmp;
        return;
    }
    ListNode* cur = head;
    while (cur->next && cur->next->val != val) {
        cur = cur->next;
    }
    if (cur->next) {
        ListNode* toDelete = cur->next;
        cur->next = toDelete->next;
        delete toDelete;
    }
}

// 析构函数:释放全部内存(重要!防内存泄漏)
~LinkedList() {
    while (head) {
        ListNode* tmp = head;
        head = head->next;
        delete tmp;
    }
}

};

使用示例

在 main 中测试:

int main() {
    LinkedList list;
    list.push_back(10);
    list.push_back(20);
    list.push_front(5);
    list.print(); // 输出:5 → 10 → 20
list.remove(10);
list.print(); // 输出:5 → 20

return 0;

}

注意:new 出的节点必须用 delete 释放,否则造成内存泄漏。析构函数已自动处理,无需手动调用。

进阶提示

  • 想支持任意类型?把 ListNode 和 LinkedList 改成模板类(加 template
  • 需要双向链表?节点增加 prev 指针,插入/删除逻辑稍复杂但结构对称
  • 实际项目中优先用 std::list 或 std::forward_list,它们已做充分优化和异常安全处理

基本上就这些。手写链表重在理解指针操作和内存管理逻辑,不是为了替代标准库。


# node  # ai  # c++  # 标准库  # 封装  # 构造函数  # 析构函数  # 指针  # 数据结构  # delete  # 遍历  # 链表  # 是一个  # 进阶  # 第一个  # 操作方法  # 复用  # 更清晰  # 内存管理  # 适合初学者 


相关文章: 如何做网站制作流程,*游戏网站怎么搭建?  独立制作一个网站多少钱,建立网站需要花多少钱?  css网站制作参考文献有哪些,易聊怎么注册?  微信推文制作网站有哪些,怎么做微信推文,急?  建站VPS能否同时实现高效与安全翻墙?  网站按钮制作软件,如何实现网页中按钮的自动点击?  如何通过虚拟主机空间快速建站?  C++如何编写函数模板?(泛型编程入门)  如何通过wdcp面板快速创建网站?  建站IDE高效指南:快速搭建+SEO优化+自适应模板全解析  开封网站制作公司,网络用语开封是什么意思?  相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?  如何通过虚拟主机快速搭建个人网站?  公司网站制作需要多少钱,找人做公司网站需要多少钱?  建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略  C++用Dijkstra(迪杰斯特拉)算法求最短路径  如何在腾讯云免费申请建站?  如何用低价快速搭建高质量网站?  c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗  免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?  如何在云服务器上快速搭建个人网站?  如何选择高效响应式自助建站源码系统?  建站主机是否属于云主机类型?  网站企业制作流程,用什么语言做企业网站比较好?  视频网站制作教程,怎么样制作优酷网的小视频?  ,在苏州找工作,上哪个网站比较好?  兔展官网 在线制作,怎样制作微信请帖?  威客平台建站流程解析:高效搭建教程与设计优化方案  代购小票制作网站有哪些,购物小票的简要说明?  上海网站制作网站建设公司,建筑电工证网上查询系统入口?  如何快速建站并高效导出源代码?  制作网站外包平台,自动化接单网站有哪些?  如何通过西部数码建站助手快速创建专业网站?  如何做静态网页,sublimetext3.0制作静态网页?  建站之星后台管理:高效配置与模板优化提升用户体验  齐河建站公司:营销型网站建设与SEO优化双核驱动策略  建站主机是否等同于虚拟主机?  如何确保FTP站点访问权限与数据传输安全?  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  湖州网站制作公司有哪些,浙江中蓝新能源公司官网?  建站之星安装提示数据库无法连接如何解决?  高端智能建站公司优选:品牌定制与SEO优化一站式服务  如何用腾讯建站主机快速创建免费网站?  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  图册素材网站设计制作软件,图册的导出方式有几种?  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  网站设计制作企业有哪些,抖音官网主页怎么设置? 

您的项目需求

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