全网整合营销服务商

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

免费咨询热线: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  # 遍历  # 链表  # 是一个  # 进阶  # 第一个  # 操作方法  # 复用  # 更清晰  # 内存管理  # 适合初学者 


相关文章: 天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?  沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?  视频网站制作教程,怎么样制作优酷网的小视频?  如何配置支付宝与微信支付功能?  如何快速生成橙子建站落地页链接?  公司网站制作价格怎么算,公司办个官网需要多少钱?  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  如何在阿里云ECS服务器部署织梦CMS网站?  设计网站制作公司有哪些,制作网页教程?  如何通过服务器快速搭建网站?完整步骤解析  宝塔面板创建网站无法访问?如何快速排查修复?  建站主机解析:虚拟主机配置与服务器选择指南  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  建站与域名管理如何高效结合?  如何在IIS服务器上快速部署高效网站?  装修招标网站设计制作流程,装修招标流程?  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  实例解析angularjs的filter过滤器  如何生成腾讯云建站专用兑换码?  浅谈Javascript中的Label语句  网站制作难吗安全吗,做一个网站需要多久时间?  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  专业网站建设制作报价,网页设计制作要考什么证?  深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?  油猴 教程,油猴搜脚本为什么会网页无法显示?  如何在自有机房高效搭建专业网站?  定制建站哪家更专业可靠?推荐榜单揭晓  如何用西部建站助手快速创建专业网站?  网站制作说明怎么写,简述网页设计的流程并说明原因?  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  平台云上自主建站:模板化设计与智能工具打造高效网站  rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted  简单实现Android验证码  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  建站主机选哪种环境更利于SEO优化?  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  免费视频制作网站,更新又快又好的免费电影网站?  武汉外贸网站制作公司,现在武汉外贸前景怎么样啊?  如何在Windows虚拟主机上快速搭建网站?  h5在线制作网站电脑版下载,h5网页制作软件?  建站之星如何优化SEO以实现高效排名?  广州网站设计制作一条龙,广州巨网网络科技有限公司是干什么的?  如何在IIS中新建站点并解决端口绑定冲突?  Android自定义listview布局实现上拉加载下拉刷新功能  ,怎么在广州志愿者网站注册?  宁波免费建站如何选择可靠模板与平台?  黑客入侵网站服务器的常见手法有哪些?  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱? 

您的项目需求

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