[链表]---链表相邻元素翻转
题目描述:
把链表相邻元素翻转,例如给定链表为 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
[链表]---链表相邻元素翻转相关推荐
- 双链表的基本操作---插入,删除,交,并,相邻元素的交换,不相邻元素的交换...
这个链表是带有表头的双链表.实现链表的一些规范操作,初始化,插入,删除等.包括两个头文件list.h,fatal.h,库函数list.c,测试函数testlist.c.头文件放的都是函数声明,库函数l ...
- 单链表的基本操作---插入,删除,交,并,相邻元素的交换等
这个链表是带有表头的单链表.实现链表的一些规范操作,初始化,插入,删除等.包括两个头文件list.h,fatal.h,库函数list.c,测试函数testlist.c.头文件放的都是函数声明,库函数l ...
- [C语言] 单向链表的构建以及翻转算法_图文详解(附双向链表构建代码)
[C语言]单向链表的构建以及翻转算法 一.基本概念 单向链表的链接方向是单向的,其中每个结点都有指针成员变量指向链表中的下一个结点,访问链表时要从头节点(带头节点的链表)或存储首个数据的节点(不带头节 ...
- LeetCode: 2_Add Two Numbers | 两个链表中的元素相加 | Medium
题目: You are given two linked lists representing two non-negative numbers. The digits are stored in r ...
- 双向链表_如何通过Java单次查找链表的中间元素
双向链表 您如何一次找到LinkedList的中间元素是一个编程问题,在电话采访中经常被问到Java和非Java程序员. 这个问题类似于检查回文或计算阶乘,有时Interviewer还会要求编写代码. ...
- SDUT_2122 数据结构实验之链表七:单链表中重复元素的删除
提交代码 数据结构实验之链表七:单链表中重复元素的删除 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Proble ...
- 往有序链表的插入元素使原链表依旧有序
/*在有序链表中插入元素时,最好设置两个指针,一前一后, cur指针负责比较大小,pre指针负责定位插入位置的前驱.[关键点] (1)3中情况:空链表.第一个值比插入元素大.非空链表&& ...
- java 查找链表中间元素_如何在Java中一次性查找Java中链表的中间元素
如何在一次传递中找到LinkedList的中间元素?这是一个 Java 和非Java程序员面试时经常被问到的编程问题.这个问题类似于检查回文或计算阶乘,有时也会要求编写代码.为了回答这个问题,候选人必 ...
- java查找链表中间元素_如何通过Java单次查找链表的中间元素
java查找链表中间元素 您如何一次找到LinkedList的中间元素是一个编程问题,在电话采访中经常问Java和非Java程序员. 这个问题类似于检查回文或 计算阶乘 ,有时Interviewer还 ...
最新文章
- Java8 HashMap
- C#String与string大小写的区别
- python--学习笔记6 pandas
- 华为方舟编译器开源官网正式上线
- 学习面向对象的第一天,感觉还好啦
- 管理新语:员工随口回答,并不是有意忽悠,而是都这样
- 宗地图绘制要求和规范_地籍图、宗地图、房产图的制图规范
- Ain_搜索引擎这样用才有效率
- 神州三号开发板stm32 f103ze jlink连接失败拜求高手指点
- iOS AVCapture前置摄像头不显示镜像翻转
- 你的选择,决定了你过怎样的生活
- vuecli添加和移除插件_魔兽世界怀旧服,CEPGP EPGP插件完全汉化版 9月最新更新...
- 深度学习机器人交易_使用深度学习创建股票交易机器人
- ubuntu 17.10安装64位Chrome浏览器
- java.lang.SecurityException: User has not given permission to device UsbDevice
- 已连接WIFI却忘了WIFI密码怎么办?
- 2018百度AI开发者大会以及个人对百度开发平台的观点
- 软件工程专业课实验报告
- HyperBDR云容灾深度解析三:适配上云下云跨云多场景
- Android手势滑动(左滑和右滑)