Python实现链表反转的方法分析【迭代法与递归法】


Posted in Python onFebruary 22, 2020

本文实例讲述了Python实现链表反转的方法。分享给大家供大家参考,具体如下:

Python实现链表反转

链表反转(while迭代实现):

  • 链表的反转引入一个cur_node变量,表示当前节点;同时需要引入一个变量new_link表示反转后的新链表;while循环内还需中间变量tmp存放当前节点的后继节点,防止原链表数据丢失。
  • 在while循环内(循环条件为 cur_node !=None,若设置为cur_node.next将导致最后一个节点无法反转到新链表):
    • 首先需要将当前节点的后继节点传递给中间变量tmp
    • 当前节点指向新链表new_link
    • 当前节点指向新链表new_link后,新链表头结点更新为当前节点cur_node
    • 将中间变量tmp传递给cur_node,开始新一轮循环
    • 循环结束后返回 new_link
class Node(object):
  def __init__(self, value=None, next=None):
    self.value = value
    self.next = next

  @staticmethod
  def reverse(head):
    cur_node = head # 当前节点
    new_link = None # 表示反转后的链表
    while cur_node != None:
      tmp = cur_node.next # cur_node后续节点传递给中间变量
      cur_node.next = new_link  # cur_node指向new_link
      new_link = cur_node  # 反转链表更新,cur_node为新的头结点
      cur_node = tmp  # 原链表节点后移一位
    return new_link

link = Node(1, Node(2, Node(3, Node(4, Node(5, Node(6, Node(7, Node(8, Node(9)))))))))
root = Node.reverse(link)
while root:
    print(root.value)
    root =root.next

运行结果:

9
8
7
6
5
4
3
2
1

递归实现:

  • 递归实现与while实现不同在于递归首先找到新链表的头部节点,然后递归栈返回,层层反转
  • 首先找到新链表的头结点(即遍历到原链表的最后一个节点返回最后节点)
  • 执行函数体后续代码,将原链表中的尾节点指向原尾节点的前置节点
  • 前置节点的指针指向None(防止出现死循环)
  • 返回新链表的头部节点至上一层函数,重复以上操作
def reverse2(head):
    if head.next == None: # 递归停止的基线条件
      return head
    new_head = reverse2(head.next)
    head.next.next = head # 当前层函数的head节点的后续节点指向当前head节点
    head.next = None # 当前head节点指向None
    return new_head

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python装饰器实现几类验证功能做法实例
May 18 Python
python3 破解 geetest(极验)的滑块验证码功能
Feb 24 Python
python实现寻找最长回文子序列的方法
Jun 02 Python
Python访问MongoDB,并且转换成Dataframe的方法
Oct 15 Python
wxpython+pymysql实现用户登陆功能
Nov 19 Python
使用 Python 清理收藏夹里已失效的网站
Dec 03 Python
pytorch制作自己的LMDB数据操作示例
Dec 18 Python
python操作cfg配置文件方式
Dec 22 Python
Flask 上传自定义头像的实例详解
Jan 09 Python
基于Python生成个性二维码过程详解
Mar 05 Python
如何用Python 加密文件
Sep 10 Python
Python基础之进程详解
May 21 Python
Python实现队列的方法示例小结【数组,链表】
Feb 22 #Python
python实现从尾到头打印单链表操作示例
Feb 22 #Python
python实现滑雪游戏
Feb 22 #Python
Python实现栈的方法详解【基于数组和单链表两种方法】
Feb 22 #Python
Python栈的实现方法示例【列表、单链表】
Feb 22 #Python
python实现滑雪者小游戏
Feb 22 #Python
python实现拼图小游戏
Feb 22 #Python
You might like
PHP个人网站架设连环讲(一)
2006/10/09 PHP
PHP list() 将数组中的值赋给变量的简单实例
2016/06/13 PHP
PHP实现的网站目录扫描索引工具
2016/09/08 PHP
Thinkphp5行为使用方法汇总
2017/12/21 PHP
ThinkPHP框架实现的MySQL数据库备份功能示例
2018/05/24 PHP
Laravel 实现在Blade模版中使用全局变量代替路径的例子
2019/10/22 PHP
Packer 3.0 JS压缩及混淆工具 下载
2007/05/03 Javascript
jQuery 事件队列调整方法
2009/09/18 Javascript
图片上传插件jquery.uploadify详解
2013/11/15 Javascript
jQuery ui实现动感的圆角渐变网站导航菜单效果代码
2015/08/26 Javascript
Vue.js实现简单动态数据处理
2017/02/13 Javascript
js中获取键盘按下键值event.keyCode、event.charCode和event.which的兼容性详解
2017/03/15 Javascript
vue.js学习之UI组件开发教程
2017/07/03 Javascript
node.js中http模块和url模块的简单介绍
2017/10/06 Javascript
JS排序算法之冒泡排序,选择排序与插入排序实例分析
2017/12/13 Javascript
Element-ui自定义table表头、修改列标题样式、添加tooltip、:render-header使用
2019/04/11 Javascript
vue props default Array或是Object的正确写法说明
2020/07/30 Javascript
Vue中component标签解决项目组件化操作
2020/09/04 Javascript
python pdb调试方法分享
2014/01/21 Python
将Python代码嵌入C++程序进行编写的实例
2015/07/31 Python
使用Eclipse如何开发python脚本
2018/04/11 Python
Python列表切片常用操作实例解析
2019/12/16 Python
Django ORM实现按天获取数据去重求和例子
2020/05/18 Python
五分钟学会HTML5的WebSocket协议
2019/11/22 HTML / CSS
HTML5 图片预加载的示例代码
2020/03/25 HTML / CSS
英国第一蛋白粉品牌:Myprotein
2016/09/14 全球购物
英国奢侈品概念店:Base Blu
2019/05/16 全球购物
医学专业毕业生个人的求职信
2013/12/04 职场文书
如何客观的进行自我评价
2013/12/17 职场文书
小学庆六一活动方案
2014/02/28 职场文书
伦敦奥运会口号
2014/06/13 职场文书
漂亮妈妈观后感
2015/06/08 职场文书
2015年庆祝国庆节66周年演讲稿
2015/07/30 职场文书
python flask框架快速入门
2021/05/14 Python
教你用Java在个人电脑上实现微信扫码支付
2021/06/13 Java/Android
Redis 报错 error:NOAUTH Authentication required
2022/05/15 Redis