C++之单链表与双链表逆序实例(二百七十九)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!

优质专栏:Audio工程师进阶系列原创干货持续更新中……】🚀
优质专栏:多媒体系统工程师系列原创干货持续更新中……】🚀
优质视频课程:AAOS车载系统+AOSP14系统攻城狮入门实战课原创干货持续更新中……】🚀

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

更多原创,欢迎关注:Android系统攻城狮

欢迎关注Android系统攻城狮

🍉🍉🍉文章目录🍉🍉🍉

    • 🌻1.前言
    • 🌻2.单链表与双链表逆序介绍
      • 2.1.1 🐥 单链表
      • 2.1.2 🐥 双链表
      • 2.1.3 🐥 单链表的逆序
      • 2.1.3 🐥 双链表的逆序
    • 🌻3.代码实例
      • 🐓3.1 单链表逆序
      • 🐓3.2 双链表逆序

🌻1.前言

本篇目的:C++之单链表与双链表逆序实例

🌻2.单链表与双链表逆序介绍

  • 单链表和双链表是线性表的两种常见实现方式,它们在数据结构中占有重要的地位。链表通过指针将不连续的内存空间连接起来,从而实现对线性数据的存储和管理。

2.1.1 🐥 单链表

  • 单链表是由一系列节点组成的线性集合。每个节点包含两个部分:数据域和指针域。数据域用于存储节点的数据,指针域用于存储下一个节点的地址。单链表的起始节点称为头节点,最后一个节点的指针域指向NULL。
  • 单链表的操作主要包括节点的插入、删除和遍历。插入操作分为在头部插入、在尾部插入和在指定位置插入。删除操作分为删除头节点、删除尾节点和删除指定位置的节点。遍历操作则是从头节点开始,依次访问每个节点。

2.1.2 🐥 双链表

  • 双链表与单链表类似,不同之处在于每个节点除了有数据域和指针域外,还有一个指向前一个节点的指针。这样,双链表的每个节点都有两个指针,分别指向前一个节点和下一个节点。双链表的起始节点同样有指向前一个节点的指针,而头节点的前一个节点指向NULL。
  • 双链表的操作主要包括节点的插入、删除和遍历。插入操作分为在头部插入、在尾部插入和在指定位置插入。删除操作分为删除头节点、删除尾节点和删除指定位置的节点。遍历操作则是从头节点开始,依次访问每个节点。

2.1.3 🐥 单链表的逆序

  • 单链表的逆序可以通过以下步骤实现:
  1. 创建一个新节点,将其设为当前单链表的尾节点。
  2. 遍历原单链表,每次遍历到一个新的节点,将其添加到新节点的后方。
  3. 更新新节点的指针域,使其指向原单链表的头节点。

2.1.3 🐥 双链表的逆序

  • 双链表的逆序相比于单链表的逆序多了一个步骤,即需要同时更新前一个节点的指针。
  1. 创建一个新节点,将其设为当前双链表的尾节点。
  2. 遍历原双链表,每次遍历到一个新的节点,先更新其前一个节点的指针,使其指向新节点,然后将新节点添加到原节点的后方。
  3. 更新新节点的指针域,使其指向原双链表的头节点。
  • 通过以上步骤,我们可以实现单链表和双链表的逆序。位域的使用可以提高数据结构的灵活性和效率,同时也能够降低内存的使用。

🌻3.代码实例

🐓3.1 单链表逆序

#include <iostream>struct Node {int data;Node* next;
};// 函数:单链表逆序
void reverseSingleLinkedList(Node*& head) {Node* prev = nullptr;Node* current = head;Node* next = nullptr;while (current != nullptr) {next = current->next; // 保存下一个节点current->next = prev; // 改变当前节点的指针方向prev = current;       // 更新前一个节点current = next;       // 移动到下一个节点}head = prev; // 更新头节点
}// 函数:打印单链表
void printSingleLinkedList(const Node* head) {const Node* current = head;while (current != nullptr) {std::cout << current->data << " ";current = current->next;}std::cout << std::endl;
}int main() {Node* head = new Node{1, nullptr}; // 创建单链表head->next = new Node{2, nullptr};head->next->next = new Node{3, nullptr};head->next->next->next = new Node{4, nullptr};std::cout << "原单链表: ";printSingleLinkedList(head);reverseSingleLinkedList(head); // 逆序单链表std::cout << "逆序后单链表: ";printSingleLinkedList(head);// 释放内存Node* temp = head;while (temp != nullptr) {Node* next = temp->next;delete temp;temp = next;}return 0;
}

🐓3.2 双链表逆序

#include <iostream>struct Node {int data;Node* next;Node* prev;
};// 函数:双链表逆序
void reverseDoubleLinkedList(Node*& head) {Node* prev = nullptr;Node* current = head;while (current != nullptr) {Node* next = current->next; // 保存下一个节点current->prev = next;       // 改变当前节点的指针方向prev = current;             // 更新前一个节点current = next;             // 移动到下一个节点}head = prev; // 更新头节点
}// 函数:打印双链表
void printDoubleLinkedList(const Node* head) {const Node* current = head;while (current != nullptr) {std::cout << current->data << " ";current = current->next;}std::cout << std::endl;
}int main() {Node* head = new Node{1, nullptr, nullptr}; // 创建双链表head->next = new Node{2, nullptr, nullptr};head->next->prev = head;head->next->next = new Node{3, nullptr, nullptr};head->next->next->prev = head->next;head->next->next->next = new Node{4, nullptr, nullptr};head->next->next->next->prev = head->next->next;std::cout << "原双链表: ";printDoubleLinkedList(head);reverseDoubleLinkedList(head); // 逆序双链表std::cout << "逆序后双链表: ";printDoubleLinkedList(head);// 释放

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/19026.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

拥塞控制的微观行为与力学解释

本文以 tcptrace 图为基&#xff0c;描述传输的微观行为&#xff0c;并给出一个初中几何描述的压水井模型。 统计复用网络的拥塞控制&#xff0c;宏观看 inflight&#xff0c;微观看 pacing rate&#xff0c;宏观大方向不对&#xff0c;微观再正确也不行。 而网络的统计动力学…

AI 驱动的低代码平台-网易CodeWave 低代码平台 AI 智能化实践

一、实践背景&#xff1a; 随着低代码赛道的蓬勃发展&#xff0c;越来越多的低代码产品如雨后般春笋涌出开始进入市场&#xff0c;面对市场的考验&#xff0c;低代码平台也在面临两大问题&#xff1a; 定制开发的使用门槛太高&#xff0c;效率太低。低代码产品进入到企业当中…

错误信息:Traceback (most recent call last):

错误信息 Traceback (most recent call last): File "E:\python.learning\pythonDateExcavateTreat\数据挖掘课程设计\2_京东用户意向购买数据探索.py", line 74, in <module> df_ui df_ui.to_frame().reset_index() File "E:\python.learning\lib\site-…

决策树模型-预测用户是否购买某母婴产品

1&#xff0c;场景描述 假设我们是京东的数据分析师&#xff0c;负责分析母婴产品的购买行为。我们想预测用户是否会购买一款新上线的母婴产品。为了进行预测&#xff0c;我们将利用用户的历史购买数据、浏览行为和其他特征&#xff0c;通过决策树模型进行分析&#xff0c;并提…

猫狗分类识别模型建立②模型建立

一、导入依赖库 pip install opencv-python pip install numpy pip install tensorflow pip install keras 二、模型建立 pip install opencv-python pip install numpy pip install tensorflow pip install kerasimport os import xml.etree.ElementTree as ETimpor…

NSSCTF-Web题目4

[SWPUCTF 2021 新生赛]hardrce 1、题目 2、知识点 rce&#xff1a;远程代码执行、url取反编码 3、解题思路 打开题目 出现一段代码&#xff0c;审计源代码 题目需要我们通过get方式输入变量wllm的值 但是变量的值被过滤了&#xff0c;不能输入字母和\t、\n等值 所以我们需…

【教学类-59-】专注力视觉训练01(圆点百数图)

背景需求&#xff1a; 视觉训练的神奇效果&#xff0c;让你的宝贝成为焦点 - 小红书魔法视觉追踪-视觉训练—— &#x1f50d;视觉训练&#x1f50d; &#x1f539;想要提高宝宝的专注力&#xff0c;视觉训练是个绝佳方法&#xff01; &#x1f539;让宝宝仔细观察数字的路线&a…

Java中的super关键字详解

在Java编程中&#xff0c;super关键字是一个非常重要的概念&#xff0c;尤其是在继承和多态的场景中。理解super关键字的使用方法和其背后的机制&#xff0c;对于掌握面向对象编程&#xff08;OOP&#xff09;的基本概念至关重要。本篇博客将详细讲解super关键字的各种用法及其…

代码随想录算法训练营第22天(py)| 二叉树 | 669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树

669. 修剪二叉搜索树 力扣链接 给定一个二叉搜索树&#xff0c;同时给定最小边界L 和最大边界 R。通过修剪二叉搜索树&#xff0c;使得所有节点的值在[L, R]中 (R>L) 思路 如果当前节点元素小于low&#xff0c;递归右子树&#xff0c;返回符合条件的头节点 如果当前节点元…

网络请求客户端WebClient的使用

在 Spring 5 之前&#xff0c;如果我们想要调用其他系统提供的 HTTP 服务&#xff0c;通常可以使用 Spring 提供的 RestTemplate 来访问&#xff0c;不过由于 RestTemplate 是 Spring 3 中引入的同步阻塞式 HTTP 客户端&#xff0c;因此存在一定性能瓶颈。根据 Spring 官方文档…

OrangePi AIpro 快速上手初体验——接口、样例和目标检测

​ 一、 开发板简介 OrangePi AIpro开发板是香橙派联合华为精心打造的高性能 AI 开发板&#xff0c;其搭载了昇腾 AI 处理器&#xff0c;可提供 8TOPS INT8 的计算能力&#xff0c;内存提供了 8GB 和 16GB两种版本。可以实现图像、视频等多种数据分析与推理计算&#xff0c;可…

【已解决】使用token登录机制,token获取不到,blog_list.html界面加载不出来

Bug产生 今天使用token完成用户登录信息的存储的时候被卡了大半天。 因为登录的功能写的已经很多了&#xff0c;所以今天就没有写一点验一点&#xff0c;而是在写完获取博客列表功功能&#xff0c;验证完它的后端后&#xff0c;了解完令牌的基本使用以及Jwt的基本使用方式——…

4.共享文件夹的设置

注&#xff1a;设置共享文件夹&#xff1a;首先要先关机 一、点击 编辑虚拟机设置 二、点击 选项 选项卡 三、点击 共享文件夹 四、在本地建立一个共享文件夹后选择路径 五、Linux系统文件夹中的共享文件夹路径 六、在Linux系统中查看共享文件夹 Ubuntushare是共享文件夹&…

【简单介绍下idm有那些优势】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

Windows:在控制台程序中注入CTRL+C中断

一、引言 当你的控制台程序是一个循环执行Task的任务体时&#xff0c;我们有时候会需要为程序增加强制的中断指令&#xff0c;譬如CTRLC. 先不说解决方法&#xff0c;如果让你去实现&#xff0c;阁下将如何破解。 思路自然很简单&#xff0c;我们可以在程序中捕获鼠标事件&…

国内加密软件排行榜,每一款加密软件都是精品

在数字化快速发展的今天&#xff0c;数据安全和隐私保护已成为企业和个人关注的焦点。加密软件作为保护数据安全的重要手段&#xff0c;其重要性日益凸显。以下是根据权威机构的评测和用户反馈&#xff0c;整理的国内加密软件排行榜及其特点概述。 1、加密软件安企神免费试用7天…

web前端海报:深入探索其设计、技术与实现

web前端海报&#xff1a;深入探索其设计、技术与实现 Web前端海报&#xff0c;作为数字化时代的一种重要宣传手段&#xff0c;以其独特的视觉效果和交互体验&#xff0c;逐渐成为了各类活动、品牌和产品推广的必备利器。本文将围绕web前端海报的设计、技术与实现&#xff0c;从…

贷款借钱平台 小额贷款系统开发小额贷款源码 贷款平台开发搭建

这款是贷款平台源码/卡卡贷源码/小贷源码/完美版 后台51800 密码51800 数据库替换application/database.php程序采用PHPMySQL&#xff0c;thinkphp框架代码开源&#xff0c;不加密后台效果&#xff1a;手机版效果 这款是贷款平台源码/卡卡贷源码/小贷源码/完美版 后台51800 密码…

LeetCode第399场周赛c++题解

3164.优质数对的总数II 给你两个整数数组 nums1 和 nums2&#xff0c;长度分别为 n 和 m。同时给你一个正整数 k。 如果 nums1[i] 可以被 nums2[j] * k 整除&#xff0c;则称数对 (i, j) 为 优质数对&#xff08;0 < i < n - 1, 0 < j < m - 1&#xff09;。 返…

《web应用技术》第九次作业

一、将前面的代码继续完善功能 1.采用XML映射文件的形式来映射sql语句&#xff1b; <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis…