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版本的按任意键继续/退出
Sep 26 Python
轻松理解Python 中的 descriptor
Sep 15 Python
面向初学者的Python编辑器Mu
Oct 08 Python
Python matplotlib通过plt.scatter画空心圆标记出特定的点方法
Dec 13 Python
python实现二维数组的对角线遍历
Mar 02 Python
python之pyqt5通过按钮改变Label的背景颜色方法
Jun 13 Python
Win10下python 2.7与python 3.7双环境安装教程图解
Oct 12 Python
查看已安装tensorflow版本的方法示例
Apr 19 Python
Python多个装饰器的调用顺序实例解析
May 22 Python
Python新手如何理解循环加载模块
May 29 Python
matplotlib教程——强大的python作图工具库
Oct 15 Python
Selenium环境变量配置(火狐浏览器)及验证实现
Dec 07 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 Yii框架之表单验证规则大全
2015/11/16 PHP
实现PHP中session存储及删除变量
2018/10/15 PHP
Js中setTimeout()和setInterval() 何时被调用执行的用法
2013/04/12 Javascript
jQuery实现点击文本框弹出热门标签的提示效果
2013/11/17 Javascript
使用Nodejs开发微信公众号后台服务实例
2014/09/03 NodeJs
浅谈javascript实现八大排序
2015/04/27 Javascript
简单实现限制uploadify上传个数
2015/11/16 Javascript
7个去伪存真的JavaScript面试题
2016/01/07 Javascript
jquery.validate[.unobtrusive]和Bootstrap实现tooltip错误提示问题分析
2016/10/30 Javascript
老生常谈jacascript DOM节点获取
2017/04/17 Javascript
Vue 实现树形视图数据功能
2018/05/07 Javascript
详解使用mpvue开发github小程序总结
2018/07/25 Javascript
React 路由懒加载的几种实现方案
2018/10/23 Javascript
微信小程序实现点击生成随机验证码
2020/09/09 Javascript
10分钟学会js处理json的常用方法
2020/12/06 Javascript
python发布模块的步骤分享
2014/02/21 Python
基于python3 类的属性、方法、封装、继承实例讲解
2017/09/19 Python
TensorFlow实现iris数据集线性回归
2018/09/07 Python
python求解数组中两个字符串的最小距离
2018/09/27 Python
Python使用ctypes调用C/C++的方法
2019/01/29 Python
pytorch numpy list类型之间的相互转换实例
2019/08/18 Python
在python中使用pymysql往mysql数据库中插入(insert)数据实例
2020/03/02 Python
纯CSS3制作漂亮带动画效果的主机价格表
2015/04/25 HTML / CSS
html5 Canvas画图教程(6)—canvas里画曲线之arcTo方法
2013/01/09 HTML / CSS
基于HTML5的WebGL经典3D虚拟机房漫游动画
2017/11/15 HTML / CSS
cosme官方海外旗舰店:日本最大化妆品和美容产品的综合口碑网站
2017/01/18 全球购物
TripAdvisor瑞典:全球领先的旅游网站
2017/12/11 全球购物
幼儿园园长自我鉴定
2013/10/22 职场文书
高二政治教学反思
2014/02/01 职场文书
运动会入场词200字
2014/02/15 职场文书
护士演讲稿优秀范文
2014/04/30 职场文书
电话客服专员岗位职责
2014/06/28 职场文书
工作失误检讨书范文
2015/01/26 职场文书
质检员岗位职责范本
2015/04/07 职场文书
工地食品安全责任书
2015/05/09 职场文书
监护人证明
2015/06/19 职场文书