当前位置: 首页 > wzjs >正文

哪有做奇石网站汕头专业建站

哪有做奇石网站,汕头专业建站,做整站优化,2023近期舆情热点事件在学习数据结构的过程中,链表是一个非常重要的基础数据结构。今天,我们将通过C手动实现一个单链表,并添加一个逆序打印的功能,帮助大家更好地理解链表的实现和操作。 一、链表简介 链表是一种线性数据结构,其中每个元…

在学习数据结构的过程中,链表是一个非常重要的基础数据结构。今天,我们将通过C++手动实现一个单链表,并添加一个逆序打印的功能,帮助大家更好地理解链表的实现和操作。

一、链表简介

链表是一种线性数据结构,其中每个元素(称为节点)包含数据部分和指向下一个节点的指针。与数组不同,链表的内存空间是动态分配的,因此可以灵活地插入和删除节点,而不需要移动其他元素。

单链表是最简单的链表形式,每个节点只有一个指向下一个节点的指针。

二、单链表的实现

1. 定义链表节点

我们首先定义链表节点的结构。每个节点包含一个整数值和一个指向下一个节点的指针。

#include <iostream>
using namespace std;// 定义链表节点结构
struct ListNode {int val;          // 节点存储的数据ListNode* next;   // 指向下一个节点的指针// 构造函数ListNode(int x) : val(x), next(nullptr) {}
};

2. 定义链表类

接下来,我们定义一个链表类,包含链表的基本操作,如插入、删除和遍历。

class LinkedList {
private:ListNode* head; // 链表的头指针public:// 构造函数LinkedList() : head(nullptr) {}// 析构函数,释放链表内存~LinkedList() {ListNode* current = head;while (current != nullptr) {ListNode* temp = current;current = current->next;delete temp;}}// 插入节点到链表头部void insertAtHead(int value) {ListNode* newNode = new ListNode(value);newNode->next = head;head = newNode;}// 插入节点到链表尾部void insertAtTail(int value) {ListNode* newNode = new ListNode(value);if (head == nullptr) {head = newNode;return;}ListNode* current = head;while (current->next != nullptr) {current = current->next;}current->next = newNode;}// 删除节点void deleteNode(int value) {if (head == nullptr) return; // 链表为空if (head->val == value) {ListNode* temp = head;head = head->next;delete temp;return;}ListNode* current = head;while (current->next != nullptr && current->next->val != value) {current = current->next;}if (current->next != nullptr) {ListNode* temp = current->next;current->next = current->next->next;delete temp;}}// 打印链表void printList() {ListNode* current = head;while (current != nullptr) {cout << current->val << " -> ";current = current->next;}cout << "nullptr" << endl;}// 逆序打印链表void reversePrint(ListNode* node) {if (node == nullptr) return;reversePrint(node->next);cout << node->val << " ";}// 调用逆序打印void reversePrint() {reversePrint(head);cout << endl;}
};

3. 测试链表

我们编写一个简单的测试程序来验证链表的功能,包括插入、删除、正序打印和逆序打印。

int main() {LinkedList list;// 插入节点list.insertAtHead(3);list.insertAtHead(2);list.insertAtHead(1);list.insertAtTail(4);list.insertAtTail(5);// 打印链表cout << "链表内容: ";list.printList();// 逆序打印链表cout << "逆序打印链表: ";list.reversePrint();// 删除节点list.deleteNode(3);cout << "删除节点 3 后的链表: ";list.printList();// 删除头节点list.deleteNode(1);cout << "删除头节点后的链表: ";list.printList();return 0;
}

4. 输出示例

运行上述代码后,输出如下:

链表内容: 1 -> 2 -> 3 -> 4 -> 5 -> nullptr
逆序打印链表: 5 4 3 2 1
删除节点 3 后的链表: 1 -> 2 -> 4 -> 5 -> nullptr
删除头节点后的链表: 2 -> 4 -> 5 -> nullptr

三、逆序打印的实现

逆序打印链表的关键在于递归。我们定义了一个递归函数 reversePrint,它先递归到链表的尾部,然后在回溯过程中打印每个节点的值。这种方法利用了递归的调用栈,自然地实现了逆序打印。

逆序打印函数

void reversePrint(ListNode* node) {if (node == nullptr) return;reversePrint(node->next);cout << node->val << " ";
}

调用逆序打印

void reversePrint() {reversePrint(head);cout << endl;
}

四、总结

通过手动实现单链表,我们不仅加深了对链表数据结构的理解,还学会了如何操作链表节点,包括插入、删除和遍历。此外,逆序打印功能的实现进一步展示了递归在链表操作中的强大作用。


文章转载自:

http://BIMfqFz3.xckrj.cn
http://RVe99Gu4.xckrj.cn
http://iAWA0A5j.xckrj.cn
http://eGBucu2H.xckrj.cn
http://WhHMdLsb.xckrj.cn
http://Tcvwks4r.xckrj.cn
http://12YCBOgK.xckrj.cn
http://JlJ6QzGf.xckrj.cn
http://2DMSP9bC.xckrj.cn
http://6OWHep9P.xckrj.cn
http://EBt0bnzN.xckrj.cn
http://dzZVMEIb.xckrj.cn
http://mxOhX0XA.xckrj.cn
http://DIxoRap3.xckrj.cn
http://RNVghEJM.xckrj.cn
http://fO8VK9rs.xckrj.cn
http://IO2ebpkS.xckrj.cn
http://KyJxPBwQ.xckrj.cn
http://Iuhh4gkG.xckrj.cn
http://Q5zoxYbe.xckrj.cn
http://szemQrDt.xckrj.cn
http://3UaW9QFc.xckrj.cn
http://j529B8zc.xckrj.cn
http://2xz0Dk1y.xckrj.cn
http://TpeiyiL9.xckrj.cn
http://6GVDEh2r.xckrj.cn
http://5EjbTyTw.xckrj.cn
http://yhR6IPzZ.xckrj.cn
http://sV2NlLnp.xckrj.cn
http://0FE02E79.xckrj.cn
http://www.dtcms.com/wzjs/670008.html

相关文章:

  • 高大上企业网站衡水网站制作与推广
  • 注册外国网站大学学校网站建设方案
  • 如何做好网站建设的设计布局江门网站优化方案
  • 临沂网站优化如何培训网页制作机构
  • 服务器密码能给做网站的吗王占山 同济大学
  • 惠州城乡和住房建设局网站泉州百度竞价开户
  • 聚焦伟业网站怎么做推广idc销售网站源码
  • 南沙电子商务网站建设营销网站建设 公司排名
  • 茶叶公司网站模板网站建设氵金手指下拉十二
  • 织梦手机网站怎么做百度商桥代码怎么添加到网站
  • 阿里云建立wordpress白云优化网站建设
  • 建设网站哪里好公司网站哪个建的好
  • 安徽建站费用公共资源交易中心编制
  • python做的网站哪些wordpress媒体库 不显示图片
  • wordpress网站防护百度是网站吗
  • 怎么注册一个自己的网站介绍个人网站的ppt怎么做
  • 微信公众号怎样做淘客网站建网站中企动力最行
  • 公司网站建设维护合同范本郑州网络推广方法
  • 网站服务器异常是什么意思网站建设哪个最好
  • 湛江网站设计哪家好东城免费做网站
  • 网站开发后端选择核工业华南建设集团网站
  • 广东网站建设制作价格房屋装修设计师怎么找
  • 专业网站设计方案公司做网站主要注意些什么问题
  • 怎么在vps上做网站婚纱类网站素材
  • 门户网站域名是什么wordpress 判断 手机
  • 企业网站 开源创意建设机械网站
  • 手机网页在线游戏wordpress数据库优化插件
  • 工作作风建设网站湖南网站建站系统平台
  • 网站上的图标怎么改郑州高端网站模板
  • 保定网站建设技术支持招商加盟项目推荐