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通过shutil实现快速文件复制的方法
Mar 14 Python
Django自定义插件实现网站登录验证码功能
Apr 19 Python
详解Python map函数及Python map()函数的用法
Nov 16 Python
windows下python安装pip图文教程
May 25 Python
Python输出\u编码将其转换成中文的实例
Dec 15 Python
用Q-learning算法实现自动走迷宫机器人的方法示例
Jun 03 Python
不到20行实现Python代码即可制作精美证件照
Apr 24 Python
pytorch查看通道数 维数 尺寸大小方式
May 26 Python
keras 多gpu并行运行案例
Jun 10 Python
Python流程控制语句的深入讲解
Jun 15 Python
python主要用于哪些方向
Jul 05 Python
matplotlib相关系统目录获取方式小结
Feb 03 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
Sublime里直接运行PHP配置方法
2014/11/28 PHP
如何使用jquery动态加载js,css文件实现代码
2013/04/03 Javascript
Ext中下拉列表ComboBox组件store数据格式用法介绍
2013/07/15 Javascript
JavaScript显示当然日期和时间即年月日星期和时间
2013/10/29 Javascript
JavaScript让网页出现渐隐渐显背景颜色的方法
2015/04/21 Javascript
jQuery网页选项卡插件rTabs用法实例分析
2015/08/26 Javascript
js监听input输入框值的实时变化实例
2017/01/26 Javascript
jQuery中绑定事件bind() on() live() one()的异同
2017/02/23 Javascript
Angular.JS通过指令操作DOM的方法
2017/05/10 Javascript
bootstrap select2插件用ajax来获取和显示数据的实例
2018/08/09 Javascript
layui table 表格模板按钮的实例代码
2019/09/21 Javascript
jQuery实现查看图片功能
2020/12/01 jQuery
[01:09]2014DOTA2国际邀请赛 TI4西雅图DOTA2 中国美女coser加油助威
2014/07/20 DOTA
[01:03:59]2018DOTA2亚洲邀请赛3月30日 小组赛B组VGJ.T VS Secret
2018/03/31 DOTA
python里将list中元素依次向前移动一位
2014/09/12 Python
python中WSGI是什么,Python应用WSGI详解
2017/11/24 Python
python时间日期函数与利用pandas进行时间序列处理详解
2018/03/13 Python
Tensorflow实现AlexNet卷积神经网络及运算时间评测
2018/05/24 Python
完美解决在oj中Python的循环输入问题
2018/06/25 Python
scrapy-redis的安装部署步骤讲解
2019/02/27 Python
Python实现简单层次聚类算法以及可视化
2019/03/18 Python
Python之——生成动态路由轨迹图的实例
2019/11/22 Python
python如何删除文件、目录
2020/06/23 Python
python二维图制作的实例代码
2020/12/03 Python
Pytorch 中的optimizer使用说明
2021/03/03 Python
Cole Haan官方网站:美国时尚潮流品牌
2017/12/06 全球购物
Lulu & Georgia官方网站:购买地毯、家具、抱枕、壁纸、床上用品等
2018/03/19 全球购物
一些PHP的面试题
2015/05/06 面试题
家长给孩子的评语
2014/01/30 职场文书
铁路工务反思材料
2014/02/07 职场文书
俄语专业职业生涯规划
2014/02/26 职场文书
市级青年文明号申报材料
2014/05/26 职场文书
食堂采购员岗位职责
2015/04/03 职场文书
领导视察通讯稿
2015/07/18 职场文书
mybatis中sql语句CDATA标签的用法说明
2021/06/30 Java/Android
小喇叭开始广播了! 四十多年前珍贵老照片
2022/05/09 无线电