单链表的逆转:(头尾互换)
 1 迭代反转(适用于反转不带头节点的链表)

从当前链表的首元节点开始,一直遍历到链表的最后一个节点,这期间逐个改变所遍历到的节点的指针域,另其指向前一个节点。
    方法是借用三个指针,
    首先三个指针 begin mid end
    分别指向 null  第一个节点 第二个节点
    然后遍历就是各向后移动一个节点,直至mid指向链表中最后一个节点(此时end 为null)。

代码:head为无头节点链表的头指针link * iteration_reserve (link * head){if(head == null || head->next == null ){return head;}else{link * begin = null;link*  mid = head;link* end = head->next;// 遍历while(1){mid->next = begin;if(end == null){break;}begin = mid ;mid = end;end = end->next;}// 最后修改head头指针的指向head = mid ;return head;}

2 递归反转链

和迭代反转法相反
    实现思想是从链表的尾节点开始
    依次向前遍历
    遍历过程依次改变各节点的指向,即令其指向前一个节点

link * recursive_reverse(link *head){if(head == NULL || head->next == NULL){return head;}// 递归的出口,空链或只有一个结点,直接返回头指针else{//一直递归 找到链表中最后一个节点link * new_head = recursive_reverse(head->next);//当逐层退出时,new_head 的指向都不变,一直指向原链表中最后一个节点;//递归每退出一层,函数中 head 指针的指向都会发生改变,都指向上一个节点。//每退出一层,都需要改变 head->next 节点指针域的指向,同时令 head 所指节点的指针域为 NULL。head->next->next = head;head->next = NULL;return new_head;}}

3 头插法 反转链表

是指在原有链表基础上,依次将位于链表头部的节点摘下,然后采用从头部插入的方式生成一个新链表,则此链表即为原链表的反转版。

link * head_reverse(link*head){link * new_head = NULL;link * temp = NULL;if(head == NULL ||head->next == NULL ){return head;}while(head != NULL){temp = head;//将temp从head中摘除head = head->next;//将temp插入到new_head的头部temp->next = new_head;new_head = temp;}return new_head;}

4 就地逆置法 反转链表

和头插法的实现思想类似 ,唯一区别在于,头插法是通过建立一个新链表实现的,而就地逆置法则是直接对原链表做修改,从而实现将原链表反转。

在原链表的基础上做修改,需要额外借助2个指针(假设分别为beg end)

link * local_reverse(link * head){link * begin = NULL;link * end = NULL;if(head == NULL ||head->next == NULL ){return head;}begin = head;end = head->next;while(end != NULL ){//将 end 从链表中摘除begin->next = end->next;//将 end 移动至链表头end->next = head;head = end;//调整 end 的指向,另其指向 beg 后的一个节点,为反转下一个节点做准备end = begin->next;}return head;}

上述代码仅仅以 无头节点的链表为例

对于有头节点的链表反转:
      迭代反转法:
          初始状态忽略头节点(直接将 mid 指向首元节点),仅需在最后一步将头节点的 next 改为和 mid 同向即可;
      头插法或者就地逆置:
          仅需将要插入的节点插入到头节点和首元节点之间即可;

递归法并不适用反转有头结点的链表(但并非不能实现),该方法更适用于反转无头结点的链表。

单链表的逆转:(头尾互换)相关推荐

  1. PTA 单链表分段逆转 (12 分)

    单链表分段逆转 (12 分) 给定一个带头结点的单链表和一个整数K,要求你将链表中的每K个结点做一次逆转.例如给定单链表 1→2→3→4→5→6 和 K=3,你需要将链表改造成 3→2→1→6→5→4 ...

  2. 3-5 单链表分段逆转 (20 分)

    给定一个带头结点的单链表和一个整数K,要求你将链表中的每K个结点做一次逆转.例如给定单链表 1→2→3→4→5→6 和 K=3,你需要将链表改造成 3→2→1→6→5→4:如果 K=4,则应该得到 4 ...

  3. 1-3(*) 单链表分段逆转

    给定一个带头结点的单链表和一个整数K,要求你将链表中的每K个结点做一次逆转.例如给定单链表 1→2→3→4→5→6 和 K=3,你需要将链表改造成 3→2→1→6→5→4:如果 K=4,则应该得到 4 ...

  4. 单链表原地逆转 c语言,链式结构线性表的实现(二)

    链式结构线性表的实现(二) 一.目的: 掌握链表的表示方法,存储结构及其基本操作的实现,灵活使用链表. 二.要求: 修改实验三的程序,完成 (1)实现带头接点的单链表的原地逆转(结果链表仍使用原链表的 ...

  5. 逆转线性单链表 c语言,单链表的逆转,不会做啊

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 以前做的还找得到,呵呵,绐你贴出来了,C语言版的 #include struct datatype{ char a[30]; }; struct node ...

  6. 求单链表的最大值与原地逆转_数据结构精选考研试题.pdf

    [注]:编写程序可选用任一种高语言,算法描述可采用类语言,必要时加上注释 一. 回答下列问题:[20分] 1. 算法的定义和性质 2. 为什么说数组与广义表是线性表的推广? 3. 什么是结构化程序设计 ...

  7. 【数据结构】单链表的应用(C语言)

    1.设计一个算法,求一个单链表中的节点数 2.设计一个算法,在一个单链表中值为y的结点前插入一个值为x的结点(值为x的新结点为成为值为y的结点前驱结点) 3.设计一个算法,判断单链表中各结点是否有序 ...

  8. java 链表反转_剑指BAT:如何最优雅着反转单链表?

    前言 以专题的形式更新刷题贴,欢迎跟我一起学习刷题,相信我,你的坚持,绝对会有意想不到的收获.每道题会提供简单的解答,如果你有更优雅的做法,欢迎提供指点,谢谢 [题目描述] 反转单链表.例如链表为: ...

  9. 单链表创建学生成绩表 输出学生姓名成绩及班级平均分

    建立单链表(有头尾指针)用于存放学生某门课程成绩(整型):输出链表中的所有数据和平均成绩,并且能够在指定的位置插入或删除指定的某学生的成绩.要求:数据个数和数据从键盘输入. #include < ...

最新文章

  1. 安卓版文字扫描识别软件
  2. 计算机里FC方式,【计算机基础】在0和1的世界里来来回回
  3. 要是不会用数据,算什么IT产品经理?
  4. python数据可视化的特点_python的数据分析到底是啥?python数据可视化怎么做?
  5. vsan Linux 网络磁盘,理解vSAN中的磁盘空间占用
  6. css分类及其它技巧
  7. 话说软件破解:道高一尺魔高一丈
  8. 手机上网占多大流量?WiFi要不要进行限速?
  9. boost哪些库需要编译
  10. ZYNQ PL系列(一)VIVADO 的使用
  11. Crossing Number of Graphs 读书笔记
  12. MacVim配置参考
  13. 【融职培训】Web前端学习 第2章 网页重构11 HTML5新增标签
  14. 教育培训系统,软件行业的“常青藤”
  15. 【解决方案】TS2300: Duplicate identifier
  16. 20亿美元宝马激光雷达订单?Innoviz上市披露哪些风险
  17. 辽宁移动数码Q5_S905M_EMMC_线刷固件包
  18. mfc 直线的裁剪 Cohen-Sutherland裁剪算法
  19. 野菜部落物理引擎实现
  20. 上海亚商投顾:兔年首日开门红 北向资金净流入超186亿

热门文章

  1. 习惯养成android软件,六款有助于养成良好习惯的APP(安卓)
  2. linux服务器搭建之路1-安装各种软件
  3. antd 动态自定义表单验证失效
  4. javase_20(Awt初步认识)
  5. (筆記) 否定疑問句的回答 (Japanese)
  6. Sublime Text 崇高文本 ----最性感的编辑器(程序员必备)
  7. Android studio制作简单微信界面
  8. 解决OBS录屏软件窗口采集不全的问题
  9. 一位华裔复活了美国奥数国家队:掌舵 6 年 4 次夺冠,打破中国队“垄断”
  10. 2012年10月【美国】自驾游