通过迭代(非递归)及递归将单链表逆序
通过迭代(非递归)及递归将单链表逆序
老生常谈的问题了,不过很多地方面试还是很喜欢问这个问题。实际工程中感觉用处不大,需要逆序的存储为什么要选择单链表呢?为什么不用list(in c++)或iterator(in any language)?或者将数据全部推入栈中再依次弹出。说了这么多有点无聊了,参看酷壳的《我为什么反对纯算法面试》。
迭代(非递归)算法描述:
设置两个临时指针prev和next分别标记当前结点的前驱和后继,将当前结点的next指针指向前驱,然后把前驱指针替换为当前结点,当前结点替换为next,即向“后”移动,直到链表空了(next为NULL)。
C/C++实现:
1 typedef struct _Node 2 { 3 struct _Node* next; 4 int data; 5 } List; 6 7 List* reverse(List* head) 8 { 9 if(List == NULL) 10 return ; 11 12 List* pre = head; 13 List* cur = head->next; 14 List* ne; 15 while(cur != NULL) 16 { 17 ne = cur->next; 18 cur->next = pre; 19 pre = cur; 20 cur = next; 21 } 22 head->next = NULL; 23 head = pre; 24 25 return head; 26 }
递归算法描述:要将当前结点逆序,那么先将它的后继结点都逆序,然后把逆序后的尾结点的next指向当前结点即可。
C/C++实现:
1 List* recurReverse(List* p, List* head) 2 { 3 if(p == NULL || p->next == NULL) 4 { 5 head = p; 6 return p; 7 } 8 else 9 { 10 List* q = reverse(p->next, head); 11 q->next = p; 12 return p; 13 } 14 }
完。
转载于:https://www.cnblogs.com/ccdev/archive/2012/09/08/2676485.html
通过迭代(非递归)及递归将单链表逆序相关推荐
- 单链表逆序输出(递归)
将单链表逆序输出 对于单链表逆序输出不改变链表结构可以考虑使用递归实现. 递归输出的主要思路为:先输出除当前节点外的后继子链表,然后输出当前结点.假如链表为:1->2->3->4-& ...
- c语言将一个已知头结点的单链表逆序_C语言实现单链表逆序与逆序输出实例
单链表的逆序输出分为两种情况,一种是只逆序输出,实际上不逆序:另一种是把链表逆序.本文就分别实例讲述一下两种方法.具体如下: 1.逆序输出 实例代码如下: #include #include #inc ...
- 单链表逆序生成及逆置的完整实现
单链表逆序生成及逆置的完整实现 本例中单链表数据类型定义成int型,可更改 头文件1(1.h) 宏定义及Status类型定义 头文件2(2.h) 单链表基本操作函数与逆置函数 include" ...
- c语言单链表_C语言笔试题—单链表逆序
前情回顾 之前更多的是给大家推荐的是好用的软件,经过反思之后觉得这些东西并不是我想要的,所以从今天开始我要转变方向了,更多的往我的专业方向去发展(虽然我是个小白),当然如果有说的不对的地方,希望大家能 ...
- 算法习题---线性表之单链表逆序打印
一:题目 逆序打印单链表中的数据,假设指针指向单链表的开始结点 二:思路 1.可以使用递归方法,来进行数据打印 2.可以借助数组空间,获取长度,逆序打印数组 3.若是可以,对链表数据使用头插法,逆序排 ...
- python单链表逆序_python链表倒序
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! python 实现双向链表(图解)----双向链表双向链表也叫双链表,是链表的一 ...
- c语言将一个已知头结点的单链表逆序_C语言实现常用数据结构:静态链表数组实现(第5篇)...
「今天是学习C语言第 148 天」 纸上学来终觉浅,绝知此事要躬行.-- 陆游「冬夜读书示子聿」 # 静态链表 使用数组实现,利用数组下标代替指针,从而实现数据结点之间的先后关系.实现要点: 1.数组 ...
- 单链表逆序的多种方式
https://www.cnblogs.com/eniac12/p/4860642.html template<class T> void List<T>::Inverse() ...
- 【数据结构】单链表逆序
编写算法,将一个结点类型为Lnode的单链表按逆序链接,即若原单链表中存储元素的次序为a1,--an-1,an,则逆序链接后变为,+an,an-1,--a1. Void contrary (Lnode ...
最新文章
- Brute Force STL --- UVA 146 ID Codes
- OpenCV学习笔记(四十六)——FAST特征点检测features2D OpenCV学习笔记(四十七)——VideoWriter生成视频流highgui OpenCV学习笔记(四十八)——PCA算
- 怎样写C代码——《狂人C》习题解答1(第一章习题7)
- android 如何保留数据两位小数
- java泛型程序设计——类型变量限定 + 泛型代码和虚拟机
- ROS笔记(11) Qt工具箱
- OpenCV-计算自然对数cv::log
- Deformation Transfer for Triangle Meshes
- String、StringBuffer 与StringBuilder
- lintcode 丢鸡蛋
- Linux下安装神通数据库
- C++ ISBN 号码
- Diss GitHub被收购?说不定是件大喜事呢!
- Phoenix 升級报Cluster is being concurrently upgraded from 4.9.x to 4.13.x 错误
- 白话 RESTful,OpenApi(OAS),Swagger
- 苹果5越狱教程_iOS13.5越狱教程
- 1、学生如何购买云服务器、域名(系列:个人博客搭建)
- Matplotlib 绘图 笔记
- 网络协议篇之SNMP协议(二)—— 管理信息库MIB及OID
- 20. Linux提权:从入门到放弃
热门文章
- Failed to read auto-increment value from storageengine错误的处理方法
- c/c++格式化字符串的标识
- c++ websocket客户端_阿里面经WebSocket实时通信
- activiti 流程图乱码
- matlab debug出现k,MATLAB下的程序调试
- 为什么jsp写script代码报错_JSP 报错:ReferenceError: $ is not defined
- python大神作品_掌握了这24个顶级Python库,你就是大神!
- csgo服务器linux云崖居,CSGO修改地图天气背景指令
- 美国研发出第一台计算机的时间,研发世界第一台电脑的核心人物,被美国隐藏35年,只因他是个华人...
- 教育部计算机科学,关于批准计算机科学与技术专业教学改革与实践项目立项的通知...