题目描述:
把链表相邻元素翻转,例如给定链表为 1->2->3->4->5->6->7,则翻转后的链表变为 2->1->4->3->6->5->7。

主要思路:通过调整结点指针域的指向来直接调换相邻的两个结点。如果单链表恰好有 偶数个结点,那么只需要将奇偶结点对调即可,如果链表有奇数个结点,那么只需要将除最 后一个结点外的其它结点进行奇偶对调即可。为了便于理解,下图给出了其中第一对结点对调的方法。

在上图中,当前遍历到结点 cur,通过(1)~(6)6 个步骤用虚线的指针来代替实线的 指针实现相邻结点的逆序。其中,(1)~(4)实现了前两个结点的逆序操作,(5)和(6) 两个步骤向后移动指针,接着可以采用同样的方式实现后面两个相邻结点的逆序操作

class Lnode():def __init__(self,x):self.data=xself.next=None
#相邻元素翻转
def reverse(head):if head==None or head.next==None:return pre=head  # 当前结点的前驱结点cur=head.next  # 当前遍历结点nex=None  # 当前结点后继结点的后继结点while cur!=None and cur.next!=None:nex=cur.next.next  # 见图第(1)步pre.next=cur.next  # 见图第(2)步cur.next.next=cur  # 见图第(3)步cur.next=nex       # 见图第(4)步pre=cur            # 见图第(5)步cur=nex            # 见图第(6)步if __name__=="__main__":i=1head=Lnode(None)head.next=Noneh1=headwhile i<8:tmp=Lnode(None)tmp.next=Nonetmp.data=ih1.next=tmph1=tmpi+=1print("链表")cur=head.nextwhile cur!=None:print(cur.data)cur=cur.nextprint("翻转")reverse(head)cur=head.nextwhile cur!=None:print(cur.data)cur=cur.next

[链表]---链表相邻元素翻转相关推荐

  1. 双链表的基本操作---插入,删除,交,并,相邻元素的交换,不相邻元素的交换...

    这个链表是带有表头的双链表.实现链表的一些规范操作,初始化,插入,删除等.包括两个头文件list.h,fatal.h,库函数list.c,测试函数testlist.c.头文件放的都是函数声明,库函数l ...

  2. 单链表的基本操作---插入,删除,交,并,相邻元素的交换等

    这个链表是带有表头的单链表.实现链表的一些规范操作,初始化,插入,删除等.包括两个头文件list.h,fatal.h,库函数list.c,测试函数testlist.c.头文件放的都是函数声明,库函数l ...

  3. [C语言] 单向链表的构建以及翻转算法_图文详解(附双向链表构建代码)

    [C语言]单向链表的构建以及翻转算法 一.基本概念 单向链表的链接方向是单向的,其中每个结点都有指针成员变量指向链表中的下一个结点,访问链表时要从头节点(带头节点的链表)或存储首个数据的节点(不带头节 ...

  4. LeetCode: 2_Add Two Numbers | 两个链表中的元素相加 | Medium

    题目: You are given two linked lists representing two non-negative numbers. The digits are stored in r ...

  5. 双向链表_如何通过Java单次查找链表的中间元素

    双向链表 您如何一次找到LinkedList的中间元素是一个编程问题,在电话采访中经常被问到Java和非Java程序员. 这个问题类似于检查回文或计算阶乘,有时Interviewer还会要求编写代码. ...

  6. SDUT_2122 数据结构实验之链表七:单链表中重复元素的删除

    提交代码 数据结构实验之链表七:单链表中重复元素的删除 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Proble ...

  7. 往有序链表的插入元素使原链表依旧有序

    /*在有序链表中插入元素时,最好设置两个指针,一前一后, cur指针负责比较大小,pre指针负责定位插入位置的前驱.[关键点] (1)3中情况:空链表.第一个值比插入元素大.非空链表&& ...

  8. java 查找链表中间元素_如何在Java中一次性查找Java中链表的中间元素

    如何在一次传递中找到LinkedList的中间元素?这是一个 Java 和非Java程序员面试时经常被问到的编程问题.这个问题类似于检查回文或计算阶乘,有时也会要求编写代码.为了回答这个问题,候选人必 ...

  9. java查找链表中间元素_如何通过Java单次查找链表的中间元素

    java查找链表中间元素 您如何一次找到LinkedList的中间元素是一个编程问题,在电话采访中经常问Java和非Java程序员. 这个问题类似于检查回文或 计算阶乘 ,有时Interviewer还 ...

最新文章

  1. Java8 HashMap
  2. C#String与string大小写的区别
  3. python--学习笔记6 pandas
  4. 华为方舟编译器开源官网正式上线
  5. 学习面向对象的第一天,感觉还好啦
  6. 管理新语:员工随口回答,并不是有意忽悠,而是都这样
  7. 宗地图绘制要求和规范_地籍图、宗地图、房产图的制图规范
  8. Ain_搜索引擎这样用才有效率
  9. 神州三号开发板stm32 f103ze jlink连接失败拜求高手指点
  10. iOS AVCapture前置摄像头不显示镜像翻转
  11. 你的选择,决定了你过怎样的生活
  12. vuecli添加和移除插件_魔兽世界怀旧服,CEPGP EPGP插件完全汉化版 9月最新更新...
  13. 深度学习机器人交易_使用深度学习创建股票交易机器人
  14. ubuntu 17.10安装64位Chrome浏览器
  15. java.lang.SecurityException: User has not given permission to device UsbDevice
  16. 已连接WIFI却忘了WIFI密码怎么办?
  17. 2018百度AI开发者大会以及个人对百度开发平台的观点
  18. 软件工程专业课实验报告
  19. HyperBDR云容灾深度解析三:适配上云下云跨云多场景
  20. Android手势滑动(左滑和右滑)

热门文章

  1. matlab 设计 18db,基于混沌理论的微弱MPSK信号解调方案设计
  2. Ajax POST请求获取后台返回的数据
  3. svn提交错误file is scheduled for addition, but is missing
  4. 6月19日 NSFileHandle文件类的常用方法
  5. 为什么计算机有信息记忆功能,为什么计算机有记忆能力
  6. 【安全牛学习笔记】漏洞扫描
  7. Linux中read接收用户输入
  8. solr 修改端口号
  9. DPM2012学习(九),配置DPM发送电子邮件
  10. Android事件处理之多点触摸与手势识别