通过迭代(非递归)及递归将单链表逆序

老生常谈的问题了,不过很多地方面试还是很喜欢问这个问题。实际工程中感觉用处不大,需要逆序的存储为什么要选择单链表呢?为什么不用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. 单链表逆序输出(递归)

    将单链表逆序输出 对于单链表逆序输出不改变链表结构可以考虑使用递归实现. 递归输出的主要思路为:先输出除当前节点外的后继子链表,然后输出当前结点.假如链表为:1->2->3->4-& ...

  2. c语言将一个已知头结点的单链表逆序_C语言实现单链表逆序与逆序输出实例

    单链表的逆序输出分为两种情况,一种是只逆序输出,实际上不逆序:另一种是把链表逆序.本文就分别实例讲述一下两种方法.具体如下: 1.逆序输出 实例代码如下: #include #include #inc ...

  3. 单链表逆序生成及逆置的完整实现

    单链表逆序生成及逆置的完整实现 本例中单链表数据类型定义成int型,可更改 头文件1(1.h) 宏定义及Status类型定义 头文件2(2.h) 单链表基本操作函数与逆置函数 include" ...

  4. c语言单链表_C语言笔试题—单链表逆序

    前情回顾 之前更多的是给大家推荐的是好用的软件,经过反思之后觉得这些东西并不是我想要的,所以从今天开始我要转变方向了,更多的往我的专业方向去发展(虽然我是个小白),当然如果有说的不对的地方,希望大家能 ...

  5. 算法习题---线性表之单链表逆序打印

    一:题目 逆序打印单链表中的数据,假设指针指向单链表的开始结点 二:思路 1.可以使用递归方法,来进行数据打印 2.可以借助数组空间,获取长度,逆序打印数组 3.若是可以,对链表数据使用头插法,逆序排 ...

  6. python单链表逆序_python链表倒序

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! python 实现双向链表(图解)----双向链表双向链表也叫双链表,是链表的一 ...

  7. c语言将一个已知头结点的单链表逆序_C语言实现常用数据结构:静态链表数组实现(第5篇)...

    「今天是学习C语言第 148 天」 纸上学来终觉浅,绝知此事要躬行.-- 陆游「冬夜读书示子聿」 # 静态链表 使用数组实现,利用数组下标代替指针,从而实现数据结点之间的先后关系.实现要点: 1.数组 ...

  8. 单链表逆序的多种方式

    https://www.cnblogs.com/eniac12/p/4860642.html template<class T> void List<T>::Inverse() ...

  9. 【数据结构】单链表逆序

    编写算法,将一个结点类型为Lnode的单链表按逆序链接,即若原单链表中存储元素的次序为a1,--an-1,an,则逆序链接后变为,+an,an-1,--a1. Void contrary (Lnode ...

最新文章

  1. Brute Force STL --- UVA 146 ID Codes
  2. OpenCV学习笔记(四十六)——FAST特征点检测features2D OpenCV学习笔记(四十七)——VideoWriter生成视频流highgui OpenCV学习笔记(四十八)——PCA算
  3. 怎样写C代码——《狂人C》习题解答1(第一章习题7)
  4. android 如何保留数据两位小数
  5. java泛型程序设计——类型变量限定 + 泛型代码和虚拟机
  6. ROS笔记(11) Qt工具箱
  7. OpenCV-计算自然对数cv::log
  8. Deformation Transfer for Triangle Meshes
  9. String、StringBuffer 与StringBuilder
  10. lintcode 丢鸡蛋
  11. Linux下安装神通数据库
  12. C++ ISBN 号码
  13. Diss GitHub被收购?说不定是件大喜事呢!
  14. Phoenix 升級报Cluster is being concurrently upgraded from 4.9.x to 4.13.x 错误
  15. 白话 RESTful,OpenApi(OAS),Swagger
  16. 苹果5越狱教程_iOS13.5越狱教程
  17. 1、学生如何购买云服务器、域名(系列:个人博客搭建)
  18. Matplotlib 绘图 笔记
  19. 网络协议篇之SNMP协议(二)—— 管理信息库MIB及OID
  20. 20. Linux提权:从入门到放弃

热门文章

  1. Failed to read auto-increment value from storageengine错误的处理方法
  2. c/c++格式化字符串的标识
  3. c++ websocket客户端_阿里面经WebSocket实时通信
  4. activiti 流程图乱码
  5. matlab debug出现k,MATLAB下的程序调试
  6. 为什么jsp写script代码报错_JSP 报错:ReferenceError: $ is not defined
  7. python大神作品_掌握了这24个顶级Python库,你就是大神!
  8. csgo服务器linux云崖居,CSGO修改地图天气背景指令
  9. 美国研发出第一台计算机的时间,研发世界第一台电脑的核心人物,被美国隐藏35年,只因他是个华人...
  10. 教育部计算机科学,关于批准计算机科学与技术专业教学改革与实践项目立项的通知...