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连接sql server乱码的解决方法
Jan 28 Python
Python中装饰器的一个妙用
Feb 08 Python
用Python编写一个每天都在系统下新建一个文件夹的脚本
May 04 Python
使用Python3 编写简单信用卡管理程序
Dec 21 Python
python数据清洗系列之字符串处理详解
Feb 12 Python
将tensorflow的ckpt模型存储为npy的实例
Jul 09 Python
python 在屏幕上逐字显示一行字的实例
Dec 24 Python
Python进程池Pool应用实例分析
Nov 27 Python
PyCharm使用Docker镜像搭建Python开发环境
Dec 26 Python
新版Pycharm中Matplotlib不会弹出独立的显示窗口的问题
Jun 02 Python
numba提升python运行速度的实例方法
Jan 25 Python
Python中非常使用的6种基本变量的操作与技巧
Mar 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
python实现拼图小游戏
Feb 22 #Python
You might like
ThinkPHP分页实例
2014/10/15 PHP
PHP线程的内存回收问题
2016/07/08 PHP
kindeditor 加入七牛云上传的实例讲解
2017/11/12 PHP
js解析与序列化json数据(二)序列化探讨
2013/02/01 Javascript
理解javascript回调函数
2014/12/28 Javascript
JS实现随机乱撞彩色圆球特效的方法
2015/05/05 Javascript
jQuery操作属性和样式详解
2016/04/13 Javascript
JS在onclientclick里如何控制onclick的执行
2016/05/30 Javascript
AngularJS Bootstrap详细介绍及实例代码
2016/07/28 Javascript
JS异步加载的三种实现方式
2017/03/16 Javascript
vue使用Axios做ajax请求详解
2017/06/07 Javascript
JavaScript中递归实现的方法及其区别
2017/09/12 Javascript
详解如何在项目中使用jest测试react native组件
2018/02/09 Javascript
基于vue实现滚动条滚动到指定位置对应位置数字进行tween特效
2019/04/18 Javascript
使用p5.js临摹动态图片
2019/11/04 Javascript
Vue3+elementui plus创建项目的方法
2020/12/01 Vue.js
对Python进行数据分析_关于Package的安装问题
2017/05/22 Python
pyqt5让图片自适应QLabel大小上以及移除已显示的图片方法
2019/06/21 Python
调试Django时打印SQL语句的日志代码实例
2019/09/12 Python
PyCharm中Matplotlib绘图不能显示UI效果的问题解决
2020/03/12 Python
HTML5计时器小例子
2013/10/15 HTML / CSS
html5中嵌入视频自动播放的问题解决
2020/05/25 HTML / CSS
DKNY品牌官网:纽约大都会时尚风格
2016/10/20 全球购物
Janie and Jack美国官网:GAP旗下的高档童装品牌
2019/09/09 全球购物
说出一些常用的类,包,接口
2014/09/22 面试题
大学生评语大全
2014/04/18 职场文书
水利局群众路线专题民主生活会发言材料
2014/09/21 职场文书
升学宴答谢词
2015/01/05 职场文书
预防艾滋病宣传活动总结
2015/05/09 职场文书
让生命充满爱观后感
2015/06/08 职场文书
2016年社会主义核心价值观心得体会
2016/01/21 职场文书
创业计划书之o2o水果店
2019/08/30 职场文书
Nginx+SpringBoot实现负载均衡的示例
2021/03/31 Servers
python爬取某网站原图作为壁纸
2021/06/02 Python
MySQL视图概念以及相关应用
2022/04/19 MySQL
i5-10400f处理相当于i7多少水平
2022/04/19 数码科技