翻转链表python递归_Python实现链表反转的方法【迭代法与递归法】

导读

这篇文章主要介绍了Python实现链表反转的方法,结合实例形式分析了Python迭代法与递归法实现链表反转的相关操作技巧与注意事项,需要的朋友可以参考下

本文实例讲述了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

运行结果:

2020022310404027-2.png

递归实现:

•递归实现与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实现链表反转的方法_【迭代法与递归法】到此结束

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/506032.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python鸡兔同笼编程运行结果_Python少儿编程:鸡兔同笼

Python少儿编程:解决鸡兔同笼问题 一笼鸡和兔子,我们数了一下,咳咳,鸡和兔子的头一共有35个,但是鸡和兔子的脚一共有94只。 好的,那么吃货们我们来好好算一算,到底能做几只德州扒鸡和双流兔头呢…

keil debug如何在watch直接修改变量值_python日志记录系列教程,内置logging模块(一),直接使用logging模块的基础日志记录

前言:成熟的软件开发不可避免的要进行日志记录,python内置模块logging提供了强大的日志记录能力,本文将从多个角度,由浅入深的介绍logging的常见使用方法和一些基本概念,本此系列文章分为两篇,本文为系列文…

linux进程管理子系统分析,linux进程管理子系统简要分析

Linux进程管理:进程与程序:程序:存放在磁盘上的一系列代码和数据的可执行映像,是一个静止的实体。进程:是一个执行中的程序,它是动态的实体进程四要素:1. 有一段程序供其执行,这段程…

c语言变量命名规则_带你学习C语言—变量

在编写程序时,常常需要将数据存储在内存中,以便于使用这个数据或者修改这个数据的值。我们通常使用变量来存储数据,而且使用变量可以引用存储在内存中的数据,并随时根据需要对数据进行处理。变量的概念在程序设计中,允…

html缩进快捷键_Windows IDEA 快捷键终极大全,果断收藏!

作者:JaJian出处:https://www.cnblogs.com/jajian/p/8012603.html话说IDEA对新手来说难,可能其中一个原因就是快捷键组合多而且复杂但是它也很全,基本所有功能都可以通过快捷键来完成,可以这么说,如果你掌握…

安装quartus时弹出错误_Win10 安装arcgis10.2 for desktop需要.net framework 解决方案

有效解决“Win10 安装arcgis10.2 for desktop需要microsoft.net framework 3.5 sp1或等效环境”。台式电脑新装了系统,重新安装arcgis 10.2时弹出“安装arcgis10.2 for desktop需要microsoft.net framework 3.5 sp1或等效环境 ”。在网上百度了很多的相关知识&#…

下面哪个字段是http请求中必须具备的_HTTP 协议报文结构及示例

HTTP 基本架构下面我们用一张简单的流程图来展示 HTTP 协议基本架构,以便大家先有个基本的了解Web Client 可以是浏览器、搜索引擎、机器人等等一切基于HTTP 协议发起 http 请求的工具。Web Server 可以是任何的能解析 HTTP 请求,并返回给Web Client 可识…

文件名为空linux,文件系统:隐匿在Linux背后的机制

原标题:文件系统:隐匿在Linux背后的机制在 Linux 中,最直观、最可见的部分就是 文件系统(file system) 。下面我们就来一起探讨一下关于 Linux 中国的文件系统,系统调用以及文件系统实现背后的原理和思想。这些思想中有一些来源于…

docker安装elasticsearch_Elasticsearch amp; Kibana 部署安装 (Docker)

为什么要使用 Docker来部署 Elasticsearch 和 Kibana 呢,传统使用软件在操作系统上安装和配置的方法过于繁琐,并且受一些跨平台的约束,例如Mac、Windows、Linux等,所以无论安装什么软件,通过 Docker 进行部署是最为简单…

mfc 对话框透明 控件不透明_你不知道的丨透明胶用法

家家都有的透明胶带,而它的作用不仅仅是用来粘东西。别看它是这么小小一块,可是作用却很多。平时我们穿的衣服,裤子难免会粘上些毛。在我们紧急出门的时候,突然发现衣服粘有毛,这时候我们的透明胶就派上用场了。用透明…

python partial_Python--并行计算框架(pathos)

​应用python进行数据挖掘或计算时,往往需要遍历多种参数进行数据建模,而单次的建模或计算有时候非常耗时,这时候可以利用python的并行计算功能,加快计算速度。python能够应用并行计算的模块有多个multiprocessing、pathos等。其中…

endnote怎么改成中文版_毕业论文面对大量的参考文献标注,应该怎么办?(便捷整理的技巧和方法)...

毕业论文不同于一般的小论文,特别是硕士毕业论文或者博士毕业论文。一般的小论文就四五页,而硕士论文动辄五六十页,有的甚至七八十页,因此有些东西如果要人工的去修改,将是一件非常痛苦的事情,比如目录自动…

怎么创建数据表的实体类和业务类_微服务项目第13天:商品分类业务的实现

今天是刘小爱自学Java的第143天。感谢你的观看,谢谢你。学习计划安排如下:商品分类业务的初步实现。数据模型的分析:数据表字段的设计,Java中对应的实体类,前端页面vue组件。业务模型的分析:请求路径是什么…

power iso linux启动盘,Power ISO Maker/ISO燃烧到磁盘工具 V3.0版

电源国际标准化组织是一个专业的工具,使国际标准化组织文件,并将其燃烧到磁盘。它可以快速地创建一个ISO文件从您的计算机,和ISO文件刻录到CD / DVD光盘。该软件还可以将你的光盘/光盘刻录到一个标准的文件,并烧毁它。你可以使用的…

scripts文件夹_常用Scripts整理

常用scripts整理--2020.05.13平时在进行数据处理时,经常会用到一些脚本文件,可以提高效率,我把自己常用到的进行整理总结,希望可以有所帮助1.批量修改图片名字#codingutf-8code by zzg 2020-04-07import os import re import sy…

python下载文件加上日期_Python实现给下载文件显示进度条和下载时间代码

本篇文章小编给大家分享一下Python实现给下载文件显示进度条和下载时间代码,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。 该模块调用了三个库: 1.os 2.requests 3.…

c# 计算空格宽度像素_用pythonnet为计算机视觉做图像整理

中国的.NETer是国内技术的另类,当他们强调.NET也可以做啥啥时都会给别的技术藐视,毕竟主流都不用.NET。本人这几年其实花在.NET时间也少,都投入在Python/Go社区。可我还是有点工作外的寄托,就是让.NET也有一个很好的推广&#xff…

C语言笔试不好应该转专业吗,你认为大学里什么学科“难学”?过来人说出几门,考试难补考更难...

原标题:你认为大学里什么学科“难学”?过来人说出几门,考试难补考更难文/晓宁说教育2020届的大一新生们的第一个学期已经结束了,经过了一个学期的学习和生活,相信很多学生都对自己的大学有了一定的规划。尽管进入大学之…

python画饼图存在的问题_Matplotlib 绘制饼图解决文字重叠的方法

在使用Matplotlib 绘制饼图的时候有些时候一些数据的比列太小在饼图呈现的效果不明显 很容易被覆盖,为了解决这个问题以下就是我个人的心得。 【未解决之前呈现的效果】可以看到这个饼状图其他和硕士这2个部分占比很小而且比例相互覆盖,这让人看起来不舒…

python变量类型是动态的_【Python】python动态类型

在python中,省去了变量声明的过程,在引用变量时,往往一个简单的赋值语句就同时完成了,声明变量类型,变量定义和关联的过程,那么python的变量到底是怎样完成定义的呢? 动态类型 python使用动态类…