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实现简单的TCP代理服务器
Oct 08 Python
Python中实现对list做减法操作介绍
Jan 09 Python
Python中列表的一些基本操作知识汇总
May 20 Python
Django框架使用内置方法实现登录功能详解
Jun 12 Python
PyQt5实现暗黑风格的计时器
Jul 29 Python
pycharm 安装JPype的教程
Aug 08 Python
Python3 利用face_recognition实现人脸识别的方法
Mar 13 Python
Python3操作读写CSV文件使用包过程解析
Apr 10 Python
python操作链表的示例代码
Sep 27 Python
Vs Code中8个好用的python 扩展插件
Oct 12 Python
Python reversed反转序列并生成可迭代对象
Oct 22 Python
python实现双人五子棋(终端版)
Dec 30 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实现百度网盘图片直链的代码分享
2012/11/01 PHP
基于PHP静态类的原罪详解
2013/05/06 PHP
浅析application/x-www-form-urlencoded和multipart/form-data的区别
2014/06/22 PHP
php中namespace use用法实例分析
2016/01/22 PHP
微信开发之php表单微信中自动提交两次问题解决办法
2017/01/08 PHP
一些常用的JS功能函数代码
2009/06/23 Javascript
JQuery Tips(3) 关于$()包装集内元素的改变
2009/12/14 Javascript
JQuery中getJSON的使用方法
2010/12/13 Javascript
提示$ is not defined错误分析及解决
2013/04/09 Javascript
解析prototype,JQuery中跳出each循环的方法
2013/12/12 Javascript
jquery任意位置浮动固定层插件用法实例
2015/05/29 Javascript
使用jQuery获取data-的自定义属性
2015/11/10 Javascript
详解Angular 4.x Injector
2017/05/04 Javascript
Angularjs自定义指令Directive详解
2017/05/27 Javascript
ES6新特性:使用export和import实现模块化详解
2017/07/31 Javascript
详解webpack运行Babel教程
2018/06/13 Javascript
vue弹窗组件的实现示例代码
2018/09/10 Javascript
vuejs中父子组件之间通信方法实例详解
2020/01/17 Javascript
[36:09]Secret vs VG 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.24
2019/09/10 DOTA
Django如何自定义分页
2018/09/25 Python
Python/ArcPy遍历指定目录中的MDB文件方法
2018/10/27 Python
python 实现查找文件并输出满足某一条件的数据项方法
2019/06/12 Python
Python中用pyinstaller打包时的图标问题及解决方法
2020/02/17 Python
使用Keras实现简单线性回归模型操作
2020/06/12 Python
pytorch 移动端部署之helloworld的使用
2020/10/30 Python
英国最大的经认证的有机超市:Planet Organic
2018/02/02 全球购物
Sneaker Studio罗马尼亚网站:购买运动鞋
2018/11/04 全球购物
会计电算一体化个人简历的自我评价
2013/10/15 职场文书
招商经理岗位职责
2013/11/16 职场文书
劳动模范事迹材料
2014/01/19 职场文书
小班重阳节活动方案
2014/02/08 职场文书
志愿者服务感言
2014/02/27 职场文书
财务部岗位职责
2015/02/03 职场文书
女方家长婚礼答谢词
2015/09/29 职场文书
python 如何用map()函数创建多线程任务
2021/04/07 Python
vue router 动态路由清除方式
2022/05/25 Vue.js