链表的反转—c++版本

news2024/11/27 13:36:18

一、迭代反转法

过程分析: 

代码实现: 

#include <iostream>

struct LinkNode{ //创建一个结构体做为链表的结点
    int data;           //数据域
    LinkNode* next;  //指针域
};

void Print_Link(LinkNode* phead)     //打印链表
{
    while (phead != nullptr)
    {
        std::cout << phead->data << " ";
        phead = phead->next;
    }
    std::cout << std::endl;
}

LinkNode* inverse(LinkNode* phead)      //链表反转函数
{
    if (phead == nullptr || phead->next == nullptr)   //判断头指针是否指向链表头结点,或者链表是否存在
        return phead;

    LinkNode* pre_current = nullptr;
    LinkNode* current = phead;
    LinkNode* next_current = phead->next;

    while (1)            //遍历链表
    {
        current->next = pre_current;        //修改current指向的结点的指针域,令其指向pre_current所指的结点
        if (next_current == nullptr)         //判断next_current是否为空,如果为空表示链表已经遍历完毕
            break;
        pre_current = current;          //整体偏移三个指针
        current = next_current;
        next_current = next_current->next;
    }
    phead = current;        //遍历结束后,链表完成反转,修改头指针指向新的链表头结点

    return phead;
}

int main()
{
    LinkNode t6 = { 6,nullptr };
    LinkNode t5 = { 5,&t6 };      //只为做验证,用了静态创建链表的方式,实际中一般不会用这种方式
    LinkNode t4 = { 4,&t5 };
    LinkNode t3 = { 3,&t4 };
    LinkNode t2 = { 2,&t3 };
    LinkNode t1 = { 1,&t2 };

    LinkNode* head = &t1;        //创建头指针,用此方法反转链表可以不需要用到头指针,后面的函数的形参可以直接使用&t1,结果是一样的

    std::cout << "链表反转前元素为:\n";
    Print_Link(head);
    std::cout << "链表反转后元素为:\n";
    head = inverse(head);
    Print_Link(head);

    return 0;
}

运行结果:

 错误代码示例1:

LinkNode* inverse(LinkNode* phead)      //链表反转函数
{
    if (phead == nullptr || phead->next == nullptr)   //判断头指针是否指向链表头结点,或者链表是否存在
        return phead;

    LinkNode* pre_current = nullptr;
    LinkNode* current = phead;
    LinkNode* next_current = phead->next;

    while (current != nullptr)            //遍历链表
    {
        current->next = pre_current;        //修改current指向的结点的指针域,令其指向pre_current所指的结点
        pre_current = current;          //整体偏移三个指针
        current = next_current;
        next_current = next_current->next;
    }
    return current;
}

错误出处:while循环中的第四行代码报错,该行代码引发了异常:读取访问权限冲突。next_current 是 nullptr。

错误分析:(以6个不带头节点的元素的链表为例)

错误代码示例2: 

LinkNode* inverse(LinkNode* phead)      //链表反转函数
{
    if (phead == nullptr || phead->next == nullptr)   //判断头指针是否指向链表头结点,或者链表是否存在
        return phead;

    LinkNode* pre_current = nullptr;
    LinkNode* current = phead;
    LinkNode* next_current = phead->next;

    while (next_current != nullptr)            //遍历链表
    {
        current->next = pre_current;        //修改current指向的结点的指针域,令其指向pre_current所指的结点
        pre_current = current;          //整体偏移三个指针
        current = next_current;
        next_current = next_current->next;
    }
    return current;
}

 错误出处:while循环判断条件有误。
错误运行结果如下:

        我们可以看到,反转前的链表元素为1 2 3 4 5 6,但执行上述代码之后,反转后的链表却只有一个元素。

错误原因:

        我们可以检验6这个节点之前的子链表是否正确,我们可以将上述代码段返回语句return current;改写成return pre_current;运行修改后的程序,得到如下结果: 

 

后续方法待更新!!! 

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

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

相关文章

cadence virtuoso simulation文件夹删除

ADE XL仿真结果错误&#xff0c;与预期结果差别太大&#xff0c;与ADE L仿真结果也差别很大。 可能是由于仿真数据过多&#xff0c;卡爆了。 在virtuoso启动路径下&#xff0c;simulation文件夹是仿真过程文件&#xff0c;可以将此文件夹清空。 清空后ADE XL仿真结果正常了。…

P23 C++字符串

目录 前言 01 什么是字符串 02 字符串是怎么工作的呢&#xff1f; 2.1 字符 2.2 字符串 2.3 如何知道指向hello world的这个指针多大 03 使用字符串 04 字符串传参 前言 本期我们将讨论 C 中的字符串。 首先&#xff0c;什么是字符串&#xff1f; 01 什么是字符串 字…

基于OpenCV+YOLOv5实现车辆跟踪与计数(附源码)

导 读 本文主要介绍基于OpenCVYOLOv5实现车辆跟踪与计数的应用&#xff0c;并给出源码。 资源下载 基础代码和视频下载地址&#xff1a; https://github.com/freedomwebtech/win11vehiclecount main.py代码:​​​​​​​ import cv2import torchimport numpy as npfrom tr…

Vue CLI 初体验之如何创建一个项目并打开,以及组件的简单使用案例。

目录 什么是Vue CLI? 如何使用Vue CLI 创建一个项目 1.winr 打开cmd 输入vue create 1127(1127是文件名) 2.配置基础设置 选择Manually select features 选择Router和Vuex 选中vue版本&#xff08;我这里选vue3&#xff09; 剩下的看自己需要&#xff0c;如果不确定就一…

3、Segment Anything

github 创建anaconda环境 conda create -n ASM python3.8下载依赖包 # pytorch>1.7 and torchvision>0.8 conda install pytorch1.11.0 torchvision0.12.0 torchaudio0.11.0 cudatoolkit11.3 -c pytorchpip install githttps://github.com/facebookresearch/segment-a…

13、LCD1602调试工具

LCD1602调试工具 使用LCD1602液晶屏作为调试窗口&#xff0c;提供类似Printf函数的功能&#xff0c;可实时观察单片机内部数据的变化情况&#xff0c;便于调试和演示。 main.c #include <REGX52.H> #include "LCD1602.h" #include "Delay.h"//存储…

快速搭建一个SpringCloud、SpringBoot项目 || 项目搭建要点

1. 基本结构 建立springcloud项目从表入手&#xff0c;分析好需求建立表结构后&#xff0c;使用mybatis-plux生成POJO类&#xff0c;在对应的model模块中。 2. 微服务部分架构 2.1 依赖 service 微服务模块的依赖仅包含如下&#xff0c;数据库等依赖包含在model中&#xff0c…

【解决视觉引导多个位置需要标定多个位置的问题】

** 以下只针对2D定位&#xff0c;就是只有X、Y、Rz三个自由度的情况。** 假设一种情况&#xff0c;当视觉给机器人做引导任务时&#xff0c;零件有多个&#xff0c;分布在料框里&#xff0c;视觉需要走多个位置去拍&#xff0c;那么只需要对第一个位置确定拍照位&#xff0c;确…

力扣6:N字形变化

代码&#xff1a; class Solution { public:string convert(string s, int numRows){int lens.size();if(numRows1){return s;}int d2*numRows-2;int count0;string ret;//第一行&#xff01;for(int i0;i<len;id){rets[i];}//第k行&#xff01;for(int i1;i<numRows-1;…

智能优化算法应用:基于教与学算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于教与学算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于教与学算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.教与学算法4.实验参数设定5.算法结果6.参考文献7.…

超越GPT-4,拥有联网能力,Kimi-Chat大模型已免费使用,国内直接访问

目前ChatGPT的所有免费用户都已可以使用带有语音功能的ChatGPT。 人吧&#xff0c;总是贪婪的&#xff0c;我还想要ChatGPT Plus用户独享的“联网”功能。 目前对于ChatGPT来说&#xff0c;不想交钱&#xff0c;别拥有“联网”能力了&#xff0c;于是我找到了一个后起之秀&…

【差旅游记】新疆哈密回王府印象

哈喽&#xff0c;你好啊&#xff0c;我是雷工&#xff01; 2023年11月4号&#xff0c;那天的风的确挺大&#xff0c;逛完哈密博物馆考虑要不要去旁边的哈密回王府逛逛。想着来都来了&#xff0c;虽然网上评价不太好&#xff0c;还是去溜达一圈吧&#xff0c;于是决定自己去转转…

为啥网络安全那么缺人,但很多人却找不到工作?

文章目录 一、学校的偏向于学术二、学的东西太基础三、不上班行不行 为什么网络安全的人才缺口那么大&#xff0c;但是大学毕业能找到网安工作的人却很少&#xff0c;就连招聘都没有其他岗位多&#xff1f; 明明央视都说了网络安全的人才缺口还有300多万&#xff0c;现在找不到…

C++ 用ifstream读文件

输入流的继承关系: C++ 使用标准库类来处理面向流的输入和输出: iostream 处理控制台 IOfstream 处理命名文件 IOstringstream 完成内存 string 的 IO每个IO 对象都维护一组条件状态 flags (eofbit, failbit and badbit),用来指出此对象上是否可以进行 IO 操作。如果遇到错误…

vue实战——登录【详解】(含自适配全屏背景,记住账号--支持多账号,显隐密码切换,登录状态保持)

效果预览 技术要点——自适配全屏背景 https://blog.csdn.net/weixin_41192489/article/details/119992992 技术要点——密码输入框 自定义图标切换显示隐藏 https://blog.csdn.net/weixin_41192489/article/details/133940676 技术要点——记住账号&#xff08;支持多账号&…

「江鸟中原」有关HarmonyOS-ArkTS的Http通信请求

一、Http简介 HTTP&#xff08;Hypertext Transfer Protocol&#xff09;是一种用于在Web应用程序之间进行通信的协议&#xff0c;通过运输层的TCP协议建立连接、传输数据。Http通信数据以报文的形式进行传输。Http的一次事务包括一个请求和一个响应。 Http通信是基于客户端-服…

进程等待讲解

今日为大家分享有关进程等待的知识&#xff01;希望读完本文&#xff0c;大家能有一定的收获&#xff01; 正文开始&#xff01; 进程等待的引进 既然我们今天要讲进程等待这个概念&#xff01;那么只有我们把下面这三个方面搞明白&#xff0c;才能真正的了解进程等待&#x…

形象建设、生意经营、用户运营,汽车品牌如何在小红书一举多得?

随着小红书在多领域的持续成长&#xff0c;现在来小红书看汽车的用户&#xff0c;需求逐渐多元化与专业化。近1年的时间&#xff0c;有超过1亿人在小红书「主动搜索」过汽车内容&#xff0c;大家已经不仅限于玩车、用车&#xff0c;更是扩展到了百科全书式的看、选、买、学各个…

Python3 selenium 设置元素等待的三种方法

为什么要设置元素等待&#xff1f; 当你的网络慢的时候&#xff0c;打开网页慢&#xff0c;网页都没完全打开&#xff0c;代码已经在执行了&#xff0c;但是没找到你定位的元素&#xff0c;此时python会报错。 当你的浏览器或电脑反应慢&#xff0c;网页没完全打开&#xff0c;…