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

老生常谈的问题了,不过很多地方面试还是很喜欢问这个问题。实际工程中感觉用处不大,需要逆序的存储为什么要选择单链表呢?为什么不用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. 超越卷积、自注意力机制:强大的神经网络新算子involution
  2. vb编程的好帮手--资源文件
  3. 错误: 找不到或无法加载主类 org.apache.hadoop.mapreduce.v2.app.MRAppMaster
  4. 伏安特性曲线实验报告_电化学扩散层,Cottrell equation,取样电流伏安法
  5. PyTorch | 保存和加载模型教程
  6. linux c语言 udp 接收和发送数据用同一个端口_网络编程基础入门及TCP,UDP
  7. 2017.10.12 礼物(zjoi2011) 失败总结
  8. AttributeError: module 'socketio' has no attribute 'Server'
  9. MFC使用多线程_beginthread函数控制进度条和文本控件
  10. TFTP协议解析及C/C++代码实现
  11. AMTD:一种适应性移动目标防御方法
  12. C++中的exit()函数
  13. SpringMVC ResponseBody返回字符串带双引号解决
  14. Typora护眼绿和夜色两种背景
  15. 【示波器专题】示波器探头不同的衰减比对测量的影响
  16. 华为正式开源方舟编译器,开源了,它真的开源了!
  17. 前端使用jsencrypt的rsa加密算法加密信息后,在openresty搭建的网关处进行密文解密遇到的坑
  18. 遭遇裁员,如何渡过心理危机?
  19. 什么副业来钱快?有什么靠谱的副业可以做?
  20. 用java在控制台实现扫雷

热门文章

  1. PHP_MySQL笔试题目一
  2. python医疗系统代码_吴裕雄 人工智能 java、javascript、HTML5、python、oracle ——智能医疗系统WEB端复诊代码简洁版实现...
  3. linux tomcat java heap space_Linux下tomcat JVM内存设置
  4. opencv图像清晰度计算_收藏|分析君带你认识Python中的十大图像处理工具
  5. ubuntu 设置大小写切换隐藏_VirtualBox中ubuntu的LAMP项目(温度采集)
  6. java 字符串数组连接
  7. JNDI配置DataResource代替JDBC连接数据库
  8. java 文件保存目录结构_java web 实现文件夹上传(保留目录结构)
  9. php 注册树,php设计模式-注册树模式
  10. php操作xml文件,php xml文件操作代码(一)