在做关于单链表的一些算法题的时候,往往需要将单链表逆置后操作更加方便,但是一般说起来逆置,常用循环遍历单链表,使用头插法再次创建一个单链表实现逆置,但是这样不仅有点浪费存储空间,而且还容易搞混,那么如果要求空间复杂度为O(1)的话,那么就更不能使用头插法实现逆置了。

这时可以采用特定的算法实现单链表逆置,它的思想大概是这样的:

从头到尾扫描单链表,通过特定的手段使后面的一个结点依次指向前面的一个结点,这样,一个循环下去,那么这个单链表就实现了逆序操作。

即从
A---->A---->A----->A------>A----->A----->
变为
<-----A<-----A<-----A<-----A<-----A<-----A

可能似乎有点难以理解,我自己写了写草稿纸和代码,希望可以帮助大家理解:

因为最近在考研,时间紧,可能写的有点不规矩,嘿嘿,望谅解

C语言实现:

//将一个单链表 L 就地逆序存放 LinkList ReverseList(LinkList &L){if(L->next == NULL)                 //若单链表为空则直接返回 return L;LNode *q = L, *p = L->next, *temp;  //定义q指针指向前一个元素,p指针指向后一个元素,temp为临时指针 q->next = NULL;                       //将即将形成的链表链尾的指针域置 NULL while(p != NULL){q->data = p->data;              //将后一个元素的值赋值给前一个元素 temp = p->next;              //temp暂时记录下一元素 p->next = q;             //p指针此时反向指向q,即q将作为p的后继指针 q = p;                     //q指针后挪 p = temp;                  //p指针后挪 }q->data = 0;               //将最后形成的头结点数据域清 0L = q;                        //最终 将 q赋值给 L 作为头结点 return L;
}

运行截图:

如何逆置一个单链表(两种方法)?相关推荐

  1. 用C++实现单链表的创建、逆置和输出 的两种方法

    http://blog.csdn.net/lfeng_coding/article/details/47300563 题目描述:在已知单链表头节点的情况下,设计算法逆置单链表并输出 方法一:采用首先将 ...

  2. php文本框自动补全,PHP自动补全表单的两种方法

    效果图: 第一种:从数据库中检索之后补全 第二种:邮箱等纯前端的补全 先说第二种,使用开源的插件,所以相对简单. github上面的项目 completer. https://github.com/f ...

  3. 使用js提交form表单的两种方法

    提交form表单的时候瑶族一些简单的验证,验证完后才能提交,避免无效提交. 1.当输入用户名和密码为空的时候,需要判断.这时候就用到了校验用户名和密码,这个需要在前端页面写:有两种方法,一种是用sub ...

  4. js提交form表单的两种方法

    当输入用户名和密码为空的时候,需要判断.这时候就用到了校验用户名和密码,这个需要在前端页面写:有两种方法,一种是用submit提交.一种是用button提交. 方法一: 在jsp的前端页面的头部插入一 ...

  5. html表单调用js方法,使用js提交form表单的两种方法

    提交form表单的时候瑶族一些简单的验证,验证完后才能提交,避免无效提交. 1.当输入用户名和密码为空的时候,需要判断.这时候就用到了校验用户名和密码,这个需要在前端页面写:有两种方法,一种是用sub ...

  6. 单链表逆置 java_单链表的就地逆置--java实现(含头节点和不包含头节点)

    前沿:链表是面试中经常问道的知识点,比如链表反转,就地反转,判断单链表是否相交,判断链表是否有环等都是常问的问题.今天说一下单链表就地反转. 本文从包含头节点和不包含头节点两种链表都提供了相应的就地反 ...

  7. 无头结点单链表的逆置_单链表的增删查 逆置 倒数第k个节点等问题

    对于单链表而言,它没有双链表那么复杂,它只有头节点,尾节点,节点数据,后继指针.在下面本人实现了 单链表的 增   删   插  查  改. #include #include #include #i ...

  8. 链表就地逆置Java_单链表就地逆置(Java版)

    题目:有一个线性表(a1,a2,a3,...,an),采用带头节点的单链表L存储,设计一个算法将其就地逆置,线性表变为(an,...a3,a2,a1).所谓"就地"指辅助存储空间为 ...

  9. 逆置/反转单链表(C语言)

    1.逆置链表:前插法 void ReverseList(PSListNode* pHead) {if (NULL == *pHead){return;}else{//创建一个新的空链表,遍历pHead ...

最新文章

  1. 湖南大学让晶体管小至3纳米,沟道长度仅一层原子 | Nature子刊
  2. 用DriverStudio开发USB驱动程序
  3. 华南师范大学计算机学院重修,为什么说本科绩点低毁一生 大学重修可以刷绩点吗...
  4. 使用Pocsuite3
  5. 插入模板_现场组装楼梯踏步模板施工支设细节
  6. Python Dataframe转List
  7. python 数据模型
  8. C++PrimerPlus学习——第六章编程练习
  9. mybatis中的#{}和${}区别,和使用场景
  10. python计算2的平方代码_计算平方根
  11. 收藏其他博客园主写的代码,学习加自用。先表示感谢!!!
  12. 7-ELEVEn 便利店 EDI 概览
  13. 江苏开票系统安全接入服务器地址,江苏省增值税发票查询平台网址.doc
  14. 微信小程序可视化开发工具之动态数据
  15. poi java 导入excel_Java的poi技术读取和导入Excel
  16. jquery获取元素(父级的兄弟元素的子元素)
  17. 基因工程-3-基因工程载体
  18. 人不成熟的几大特征--海尔集团CEO张瑞敏演讲稿
  19. VMware:虚拟机磁盘空间不足怎么办
  20. 06_STM32Cubeide开发_串口通讯

热门文章

  1. 数字雕刻软件哪个强?zbrush mac版了解一下
  2. Linux设置代理上网
  3. 防火门的烟雾渗透测试英国标准是BS476-31.1吗?
  4. 关于PSP-T082主板的鉴别方法细究
  5. 阿里云ecs Linux软件漏洞
  6. Ajax局部刷新后,重新加载百度分享
  7. [Code Festival 2017 qual A-F] Squeezing Slimes
  8. android和MTKP60区别,mtkp60相当于骁龙多少
  9. c语言switch和break用法,c语言里面你不知道的break与switch,contiune的用法
  10. Mask RCNN(1): 网络详解