python算法题 链表反转详解


Posted in Python onJuly 02, 2019

链表的反转是一个很常见、很基础的数据结构题,输入一个单向链表,输出逆序反转后的链表,如图:上面的链表转换成下面的链表。实现链表反转有两种方式,一种是循环迭代,另外一种方式是递归。

python算法题 链表反转详解

第一种方式:循坏迭代

循坏迭代算法需要三个临时变量:pre、head、next,临界条件是链表为None或者链表就只有一个节点。

# encoding: utf-8
class Node(object):
def __init__(self):
self.value = None
self.next = None
def __str__(self):
return str(self.value)
def reverse_loop(head):
if not head or not head.next:
return head
pre = None 
while head:
next = head.next # 缓存当前节点的向后指针,待下次迭代用
head.next = pre # 这一步是反转的关键,相当于把当前的向前指针作为当前节点的向后指针
pre = head # 作为下次迭代时的(当前节点的)向前指针
head = next # 作为下次迭代时的(当前)节点
return pre # 返回头指针,头指针就是迭代到最后一次时的head变量(赋值给了pre)

测试一下:

if __name__ == '__main__':
three = Node()
three.value = 3
two = Node()
two.value = 2
two.next = three
one = Node()
one.value = 1
one.next = two
head = Node()
head.value = 0
head.next = one
newhead = reverse_loop(head)
while newhead:
print(newhead.value, )
newhead = newhead.next

输出:

3
2
1
0
2

python算法题 链表反转详解

第二种方式:递归

递归的思想就是:

head.next = None
head.next.next = head.next
head.next.next.next = head.next.next
...
...

head的向后指针的向后指针转换成head的向后指针,依此类推。

实现的关键步骤就是找到临界点,何时退出递归。当head.next为None时,说明已经是最后一个节点了,此时不再递归调用。

def reverse_recursion(head):
if not head or not head.next:
return head
new_head = reverse_recursion(head.next)
head.next.next = head
head.next = None
return new_head

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现人人网登录示例分享
Jan 19 Python
go语言计算两个时间的时间差方法
Mar 13 Python
Python学习笔记之if语句的使用示例
Oct 23 Python
python使用logging模块发送邮件代码示例
Jan 18 Python
Python基于matplotlib画箱体图检验异常值操作示例【附xls数据文件下载】
Jan 07 Python
Python实现多态、协议和鸭子类型的代码详解
May 05 Python
django 基于中间件实现限制ip频繁访问过程详解
Jul 30 Python
阿里云ECS服务器部署django的方法
Aug 29 Python
python numpy 矩阵堆叠实例
Jan 17 Python
python使用ctypes调用扩展模块的实例方法
Jan 28 Python
django实现将后台model对象转换成json对象并传递给前端jquery
Mar 16 Python
python 5个顶级异步框架推荐
Sep 09 Python
python输入多行字符串的方法总结
Jul 02 #Python
Django高级编程之自定义Field实现多语言
Jul 02 #Python
python 杀死自身进程的实现方法
Jul 01 #Python
python 判断linux进程,并杀死进程的实现方法
Jul 01 #Python
PyCharm-错误-找不到指定文件python.exe的解决方法
Jul 01 #Python
解决pycharm 工具栏Tool中找不到Run manager.py Task的问题
Jul 01 #Python
简单了解python中对象的取反运算符
Jul 01 #Python
You might like
德生PL330测评
2021/03/02 无线电
PHP 开发工具
2006/12/06 PHP
PHP、Python和Javascript的装饰器模式对比
2015/02/03 PHP
javascript 二分法(数组array)
2010/04/24 Javascript
Google排名中的10个最著名的 JavaScript库
2010/04/27 Javascript
基于jQuery的获得各种控件Value的方法
2010/11/19 Javascript
js+JQuery返回顶部功能如何实现
2012/12/03 Javascript
js用Date对象处理时间实现思路及代码
2013/01/31 Javascript
浅谈javascript原型链与继承
2015/07/13 Javascript
JavaScript调用传递变量参数的相关问题及解决办法
2015/11/01 Javascript
深入浅析JavaScript中prototype和proto的关系
2015/11/15 Javascript
jQuery实现的超简单点赞效果实例分析
2015/12/31 Javascript
js滑动提示效果代码分享
2016/03/10 Javascript
js 动态生成html 触发事件传参字符转义的实例
2017/02/14 Javascript
关于webpack2和模块打包的新手指南(小结)
2017/08/07 Javascript
python使用PIL模块实现给图片打水印的方法
2015/05/22 Python
举例讲解Python中的迭代器、生成器与列表解析用法
2016/03/20 Python
简单的python协同过滤程序实例代码
2018/01/31 Python
使用Python Pandas处理亿级数据的方法
2019/06/24 Python
python无序链表删除重复项的方法
2020/01/17 Python
pytorch torchvision.ImageFolder的用法介绍
2020/02/20 Python
python属于解释型语言么
2020/06/15 Python
Django用户认证系统如何实现自定义
2020/11/12 Python
Python 实现二叉查找树的示例代码
2020/12/21 Python
对CSS3选择器的研究(详解)
2016/09/16 HTML / CSS
彪马美国官网:PUMA美国
2017/03/09 全球购物
荟萃全球保健品:维他购
2018/05/09 全球购物
美国最大的户外装备和服装购物网站:Backcountry
2019/10/15 全球购物
碧欧泉法国官网:Biotherm法国
2019/10/23 全球购物
opencv实现图像几何变换
2021/03/24 Python
服装促销活动方案
2014/02/23 职场文书
初一学生评语大全
2014/04/24 职场文书
初中生期末评语大全
2014/04/24 职场文书
个人廉政承诺书
2015/04/28 职场文书
JS + HTML 罗盘式时钟的实现
2021/05/21 Javascript
Python使用PyYAML库读写yaml文件的方法
2022/04/06 Python