翻转链表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,一经查实,立即删除!

相关文章

oracle高级函数去重,傅老师课堂:Oracle高级应用之去重聚合函数

开篇一笑:高中的时候,自行车被偷,早上顺路搭同学的自行车。我坐在后座看到前面一大妈跑步,很猥琐的对同学说:“你看前面那个肥婆跑得屁股都甩圆了!”这货沉默了一下。当我们和大妈擦身而过的时候&#xff0…

jquery手写轮播图_jquery 实现轮播图详解及实例代码_jquery_脚本之家

轮播图:接触jquery也有一段时间了,今天刚好利用轮播图来练练手。博文的前面会介绍一个简单用jquery做轮播图的例子,中间会插入一些关于轮播图更多的思考,在后面会用Javascript的方法来写一个轮播图,最后则是关于jquery…

关于python_关于python的基础知识

一,编程语言的类型: 1、编译型 2、解释型 3、静态语言 4、动态语言 5、强类型定义语言 6、弱类型定义语言 编译型vs解释型 编译型: 优点:编译器一般会有预编译的过程对代码进行优化。因为编译只做一次,运行时不需要编译…

oracle10g如何导出dmp,Oracle 10g dmp文件的导入导出

Oracle数据导入dmp文件可以是“某个用户下的数据库”,也可以是“某张表”,这里以导入数据库为例说明 :1.用SYS用户名,以DBA的身份在ie中登入到数据库(ORACLE客户端Enterprise Manager Console)2.在方案->用户与权限->用户新…

idea 不打开文件提示错误_IDEA无法正常启动(打不开报错)

版权声明:转载请附上文章地址https://blog.csdn.net/qq_42672839IDEA无法正常启动(两种问题)目录第一种是缓存问题 双击Idea打开,无任何反应,资源管理器中有Idea的进程。第二种报错(报错: cannot lock system foiders)两种…

python套用word模板_如何使用Python批量创建Word模板

如何使用 Python 批量创建 Word 模板 在日常工作中我们经常需要重复性地将同一份内容的 Word 文档资料发送 给多个不同客户, 此时 Word 文档内容可能只有客户署名不同、 或者只有部分关 键信息不同。此时如果采用传统的工作方法我们可能需要反复地打开不同 Word 文档…

oracle sh文件怎么打开,Oracle数据库逻辑备份的SH文件

该Oracle教程将告诉诸位学习Oracle的朋友:Oracle数据库逻辑备份的SH文件。完全备份的SH文件:exp_comp.shrq date "%m%d" su - oracle -c "exp system/manager fully inctypecomplete file/oracle/export/db_comp$rq.dmp"累计备份的S…

jetson nano 系统镜像制作_2.Jetson Nano烧写系统镜像

烧录工具.zip点击下载Jetson Nano是一款形状和接口类似于树莓派的嵌入式主板,搭载了四核Cortex-A57处理器,GPU则是拥有128个NVIDIA CUDA核心的NVIDIA Maxwell架构显卡,内存为4GB的LPDDR4,存储则为16GB eMMC 5.1,支持4K…

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

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

linux fedora14 u盘运行,Fedora Linux系统下挂载U盘和Windows盘

前提是在mnt目录下,建立了F,D,U三个目录,还有就是sda,hda之分即串并口硬盘区别[rootlocalhost yan]# vi /etc/fstabLABEL/ / ext3 defaults 1 1tmpfs /dev/shm tmpfs defaults 0 0devpts /dev/pts devpts gid5,mode620 0 0sysfs /sys sysfs d…

linux下c语言绘图库_Linux 下的图形库介绍

在进行Linux下的图形系统编程时,我们常常会遇到以下这些概念:Framebuffer, X11, SDL,DFB, miniGUI, OpenGL,QT, GTK,KDE, GNOME等等。一、Linux 图形领域的基础设施1.1 X WindowX Window从逻辑上分为三层:X…

python解析二维码_Python二维码生成识别实例详解

前言 在 JavaWeb 开发中,一般使用 Zxing 来生成和识别二维码,但是,Zxing 的识别有点差强人意,不少相对模糊的二维码识别率很低。不过就最新版本的测试来说,识别率有了现显著提高。 对比 在没接触 Python 之前&#xff…

linux下 如何用信号signal 终止或者暂停子线程,linux下实现线程暂停

记得在windows下有一个SuspendThread使线程挂起的函数,却发现linux下没有类似的函数,于是想自己写个。。刚开始就想到用信号(没办法,正在看auep,只能想到这个)test1:用pthread_kill将SIGSTOP信号发送到要暂停的线程期望结果&#…

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

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

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

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

基于python的分布式扫描器_基于python的服务器监测系统的设计

基于python的服务器监测系统的设计高正;徐浩;余曼【期刊名称】《电脑知识与技术》【年(卷),期】2017(013)002【摘要】本文介绍了一种基于Python的服务器监测系统的设计,系统部署在需要监测的服务器上能够实时监测服务器的CPU、内存、磁盘空间.每天定时(可人工设置)自动发邮件报…

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

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

linux某个线程信号唤醒,linux多线程编程--信号量和条件变量 唤醒丢失事件

PriorityQueue有一个特征需要特别注意,即:对于那些通过排序方法判定为“相等”的元素,在通过poll方法依次取出它们时,它们的顺序是不确定的,特别是不会维持插入的顺序。举例说明:假如一个对象Obj&#xff0…

qt布局嵌套_QDockWidget嵌套布局详解-实现Visual Studio布局

概述许多工程软件,如Qt Creator,VS,matlab等,都是使用dock布局窗口,这样用户可以自定义界面,自由组合窗口。Qt的嵌套布局由QDockWidget完成,用Qt Creator拖界面得到的dock布置形式比较固定&…

ios 贝塞尔曲线 颜色填充_iOS贝塞尔曲线(UIBezierPath)的基本使用方法

简介UIBezierPath是对Core Graphics框架的一个封装,使用UIBezierPath类我们可以画出圆形(弧线)或者多边形(比如:矩形)等形状,所以在画复杂图形的时候会经常用到。分析首先我们先看一下,UIBezierPath有哪些重要的属性:1…