数据结构——链表逆序打印(C语言版)

C语言实现链表的逆序的几种方式 实现链表的逆序主要的思路有如下: 1、通过头插法来实现的。通过遍历原来的链表,将遍历得到的每一个节点都插入到新链表的头结点,然后遍历新链表,得到的就是链表的逆序了。 实现链表逆序的代码: 过程分析: 看到上面的过程,有些伙伴可能会疑问,为什么每一次遍历的时候,都需要给Node重新分配空间呢?再进行循环之前,给Node分配一次空间不就好了?一开始我也是这样想的,但是运行的结果却是只有一个值,并且陷入了死循环. 请看下面的过程分析: //将节点插入到头结点,从而实现逆序 Node * insertTop( 阅读详情

链表

一种链式存储的线性表,由任意地址的空间链接起来,其中这个任意的空间称为结点,每个结点当中包含了数据以及下一个结点!

某些情况下,要求逆序打印链表:即从尾到头打印链表

思路解析

每个结点都指向下一个结点,不能逆向访问,于是乎:要想打印最后一个结点,就必须打印其之前的所有结点, 由此思路,很显然,我们应该采取的方法是:递归 递归 递归!

递归:是程序调用自身的编程技巧 ,直接或间接的调用自身!
思想:将大事化小的思想,问题解题方式相同或相似!
优点:代码形式简单,大大减少代码量!
缺点:调用次数过多可能会导致系统崩溃!

void PrintSListFromTailToHead(PNode pHead)

{

assert(pHead);

if (NULL == pHead)                            //判空
{
    printf("顺序表为空,无法打印!!\n");
    return;
}

PNode pIndex = NULL;

pIndex = pHead;

while (NULL != pIndex->_pNext)                     //递归限制条件
{
    PrintSListFromTailToHead(pIndex->_pNext);    // 递归
    pIndex->_pNext = NULL;

}
printf("%d ", pIndex->_data);

}

测试:(如图)

链表逆序 设链表节点为typedef struct tagListNode{ int data; struct tagListNode* next; }ListNode, *List;要求将一带链表头List head的单向链表逆序。分析:  1). 若链表为空或只有一个元素,则直接返回;  2). 设置两个前后相邻的指针p,q. 将p所指向的节点作为q指向节点的后继;  3). 重复2),知道q为空  4). 调整链表头和链表尾示例:以逆序A->B->C->D为例,图示如下实现及测试代码如下: 阅读详情

相关推荐

数据结构之双向链表C语言版

数据结构之双向链表C语言版 文章目录数据结构之双向链表C语言版双向链表长什么样?双向链表的节点的结构体双向链表的链表再封装包含的头文件各个子函数的实现创建节点创建链表表头法插入数据表尾法插入数据指定位置插入数据顺序打印链表数据逆序打印链表数据表头法删除数据表尾法删除数据指定位置删除数据主函数测试 数据结构就是用来存放数据的,有很多种数据结构,这篇文章写的是双向链表,用C语言实现。学习数据结构的时候直接复制粘贴源代码是没什么用的。不知道数据结构内部的实现,等于没学。 双向链表长什么样? 在了解一个数据结构之前

Cukor丘克的博客 609

C语言实现单链表逆序与逆序输出实例

单链表的逆序输出分为两种情况,一种是只逆序输出,实际上不逆序;另一种是把链表逆序。本文就分别实例讲述一下两种方法。具体如下: 1.逆序输出 实例代码如下: #include #include #include using namespace std; typedef struct node{ int data; node * next; }node; //尾部添加 node * add(int n, node * head){ node * t = new node; t->data = n; t->next = NULL;

【阿里云大模型高级工程师ACP学习笔记】2.8 部署模型

【摘要】本文主要分享自学阿里云大模型高级工程师 ACP 认证中《2.8 部署模型》的学习笔记。详细介绍学习目标、梳理涵盖的知识点并评估其重要性和难易度,对既重要又困难的知识点进行重点分析,旨在为对阿里云大模型学习和认证感兴趣的读者提供学习思路和经验参考。

davidkorhenn的博客 2060

国产系统迁移实战:在银河麒麟V10上搞定Wine32位支持,让老Windows软件跑起来

本文详细介绍了在银河麒麟V10操作系统上构建Wine32位支持的全过程,帮助用户解决Windows应用迁移难题。从系统架构差异分析到Wine环境配置,再到实战应用部署与优化,提供了一套完整的解决方案,确保老Windows软件在国产系统上稳定运行。

weixin_32288959的博客 649

IFRS 9与CECL对比解析:跨国企业财务必须掌握的两种信用损失模型

本文深度解析IFRS 9与CECL两种信用损失模型的差异,帮助跨国企业应对财务合规挑战。从基础架构、数据治理到监管策略,详细对比三阶段模型与单一阶段模型的核心区别,并提供实施双轨制的实务建议,助力企业优化资本管理和税务筹划。

3c4x5z6v7b的博客 668

Python开发者必看:5分钟搞定Gemini API的3种调用方式(含代码示例)

本文为Python开发者详细介绍了三种高效调用Gemini API的核心方式:基础同步调用、流式调用和聊天模式,并涵盖多模态应用等高级特性。通过清晰的代码示例和实战场景分析,帮助开发者快速掌握Gemini API的集成与优化,提升AI应用开发效率。

g8f9d0s1a2的博客 1122

非线性动力学_用MatCont分析非线性动力学方程组(一)

写在前面:笔者打算写两到三篇系列文章介绍MatCont,此为第一篇《用MatCont分析非线性动力学方程组(一)》。MatCont是一个基于Matlab而开发的免费工具包,专门用来做非线性动力学模型分叉、向量场、周期性等分析,符号(连续性)运算和数值(离散性)运算均适用。该工具的开发及研究项目由比利时Ghent大学的Willy Govaerts教授、荷兰Utrecht大学的Yuri Kuznets...

weixin_39700215的博客 2767

告别C盘空间焦虑!Miniforge环境路径精准配置全攻略

本文深入解析Miniforge虚拟环境默认占用C盘空间的根本原因,即未正确配置`.condarc`文件中的`envs_dirs`路径优先级。通过详细的诊断步骤与配置命令,指导用户将环境路径精准迁移至指定磁盘(如D盘),并分享禁用自动激活、使用`--prefix`参数等高阶技巧,帮助开发者彻底告别C盘空间焦虑,实现虚拟环境的整洁与可控管理。

weixin_28831399的博客 238

使用STM32实现简单的语音识别

此外,还需要将计算机的音频输出连接到外部音频放大器上,以便将测试语音播放到MAX9814麦克风模块。运行STM32代码后,系统将开始采集语音数据,并在采集完成后调用Python脚本进行MFCC特征提取。在本案例中,我们将使用STM32F4开发板、MAX9814麦克风模块和MFCC特征提取算法来实现语音识别。通过这个案例,我们可以了解到如何结合STM32开发板和Python实现语音识别,并可以根据需要进行相关扩展和优化。现在,我们可以编译和烧录STM32代码到开发板中,并准备好测试语音文件。

吃不胖. 1473

Harmony:C# 动态代码补丁的5大秘密武器

Harmony 是一个开源库,它允许你在运行时修改托管代码(即使用 .NET 或 Mono 编译的语言编写的应用程序)。它通过利用 AOP(面向切面编程)的思想,可以在不重新编译代码的情况下添加、替换或修改方法的行为。这对于游戏模组(Modding)、插件开发以及调试工具非常有用。安装 Harmony要使用 Harmony,你需要首先安装它。Harmony 作为一个 NuGet 包,可以直接通过 Visual Studio 的 NuGet 包管理器进行安装。安装步骤打开 Visual Studio。

java专栏 1191

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

上一篇: 关于 奇偶数 排列的方法(C语言)
下一篇: 链表——删除非尾结点、某个结点位置插入值为data的结点(不能遍历链表)
Code_zx
博客等级 码龄9年 83粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值