单链表的逆序打印方法简单分析
来源:互联网 发布:网游年龄数据库 编辑:程序博客网 时间:2024/05/22 12:46
在学习数据结构的时候,我们会使用到单链表,其拥有一个结点和一个数据的结构很是让我们方便使用,但是我们会发现但我们顺序读取和打印都很方便,但是假设我们需要逆序读取或打印的时候就会出现问题,因为我们的单链表的存储空间并非像顺序表那样是连续的存储空间,经过我的一番查找和思考我发现了以下几种单链表逆序打印的方法。
一、改变每一个链表指向下一个结点的指针指向我们上一个结点即可 这样做简单粗暴,而且算法我们可以很容易地能够理解但是运算量相当大,而且需要一个媒介来保存当前的指针,而且会破坏原有的链表结构,我们如果想要链表的结构不被破坏则需要在逆序输出或使用后再度复原原链表,耗时又耗力。
二,借用栈的模式倒叙输出我们链表,这个算法的原理我们也比较容易理解。栈的模式是先进后出,后进先出。当我们遍历链表的时候,我们会先遍历到第一个节点,将它放到栈底,当我们遍历到最后一个节点的时候,它被放到了栈的最上面。所以当我们打印的时候先取出栈顶的元素打印这边是链表的最后一个节点,依次打印便可以打印出链表的逆序。
三,使用递归 这个也是我使用的一种方法。这个方法的使用熟悉递归的人 可以很容易地理解。它给我的感觉有点类似于栈。再次不多赘述。直接贴上我的代码
void reverse(Pnode phead)//逆序打印{if(phead==NULL){return ;} //此处直接打印即为顺序打印if(phead->next!=NULL){reverse(phead);}printf("%d",phead->date);}四,使用数组来逆序打印,这也是一个比较好理解的方法。我们可以在顺序遍历链表的同时将需要的数据全部保存到一个数组中去,然后我们再将我们的数组中的数据一一对应逆序打印出来即可。虽然这样做也很易于理解。但是需要开辟新的数组来保存数据,同样也十分臃肿。
综上是我所了解到的几种方法,就我个人而言,如果数据不是很大的情况下,使用递归不乏一种简单的做法。而数组法和强行改变指针法不管在数据较小或较大时,都会存在较大的运算不方便我们进行运算。递归或许是较为方便的解法。如有问题,希望各位大佬多多包含,进行指出。
0 0
- 单链表的逆序打印方法简单分析
- 单链表逆序打印方法
- 单链表的逆序打印
- 简单逆序打印
- 一种简单的单链表逆序、反转的方法
- 逆序打印一个字符串方法
- 单链表的逆序----简单实现
- 单链表之逆序打印
- 链表的逆序打印
- 最简单的方法输出数的逆序
- OC ,自定义方法:逆序打印数组
- 程序员面试宝典之数据结构基础----单链表的逆序打印
- 单链表(创建,打印,逆序,合并两个有序的链表)
- C语言实现单链表的逆序打印(带头结点)
- 简单的单链表逆序(list.c)
- 一个简单的消除调试打印方法
- web上的一些简单打印方法
- linux 打印错误的简单方法
- 数数
- LeetCode 448. Find All Numbers Disappeared in an Array(Java)
- C++ Primer_9 顺序容器
- RedHat下安装jdk
- JAVA 接口和抽象类
- 单链表的逆序打印方法简单分析
- (转)机器中的幽灵:人工智能在金融市场的影响、风险及监管
- 卡特兰数
- C语言简单操作MYSQL数据库的增删查找
- 堆排序
- [面试] 自动洗扑克牌
- android_95_layout_weight
- LinuxC语言实现递归删除目录
- LeetCode——16. 3Sum Closest