python递归&迭代方法实现链表反转
作者:惊瑟 发布时间:2021-05-04 20:42:04
标签:python,递归,迭代,链表,反转
定义链表node结构:
class ListNode:
def __init__(self,data):
self.data = data
self.next = None
将L转化为链表:
def make_list(L):
将L初始化为链表:
head = ListNode(L[0])
cur = head
for i in L[1:]:
cur.next = ListNode(i)
cur = cur.next
return head
遍历链表:
def print_list(head):
cur = head
while cur != None:
print(cur.data,end=' ')
cur = cur.next
递归法 反转链表:
def reverse_list(head):
三要素:
1.明确函数功能,该函数可以将链表反转,并返回一个头节点
2.结束条件:当链表为空或只有一个节点时返回
if head==None or head.next==None:
return head
3.等价条件(缩小范围),对于数组来讲,缩小范围是n——>n-1,对于链表来讲则可以考虑
head
——
>head.next
reverse = reverse_list(head.next) #假设reverse是head以后的、已经反转过的链表
接下来要做的是将head节点接到已经反转过的reverse上:
tmp = head.next
tmp.next = head
head.next = None
return reverse #返回新的列表
迭代法:
def reverse_list2(head):
#print_list(head)
cur = head
pre = None
while cur:
tmp = cur.next
cur.next = pre
pre = cur
cur = tmp
head = pre
return head
if __name__ == '__main__':
L = [3,2,7,8]
head = make_list(L)
正序打印:
print('原始list:')
print_list(head)
print('\n')
反转后打印:
revere = reverse_list(head)
print('反转一次的list:')
print_list(revere)
print('\n')
反转2:
print('head is')
print_list(head) #发现此时head节点变成了最后一个节点,说明函数是对head这个实例直接作用的
print('\n')
# print('revere is')
# print_list(revere)
# print('\n')
print('反转两次的list:')
print_list(reverse_list2(revere))
来源:https://blog.csdn.net/qq_34062683/article/details/121308565
0
投稿
猜你喜欢
- 1、可以在mode参数中添加'b'字符。所有适合文件对象的相同方法。然而,每种方法都希望并返回一个bytes对象。>&
- 本文实例为大家分享了PyQt5实现画布小程序的具体代码,供大家参考,具体内容如下实现的效果图如下:该实例中,涉及到的知识点有:1.PyQt5
- 以下保存成 App.xml , 与asp文件放在相同目录下! 代码如下: <?xml version="1.0"
- 本文介绍如何利用带进度条的ASP无组件实现断点续传下载大文件。<%@LANGUAGE="VBSCRIPT"&nbs
- subplot函数介绍matplotlib下, 一个 Figure 对象可以包含多个子图(Axes), 可以使用 subplot() 快速绘
- 使用celery在django项目中实现异步发送短信在项目的目录下创建celery_tasks用于保存celery异步任务。在celery_
- 这是解释器设置问题,在设置里找到interpreter 找到合适的目录就可以了。因为重装了python导致pycharm找不到路径了。另外,
- 这篇文章主要介绍了Python如何实现强制数据类型转换,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋
- 1.打包多个py文件并且去除cmd黑框格式:pyinstaller.exe -F 路径\文件名.py空格路径\文件名.py空格--nocon
- 一个不错的js效果,实现了图片预加载,并实时显示图片加载进度。<script> var l=0; var i
- 1.定义帕累托图:是一种特殊的直方图, 在项目管理知识体系中属于质量管理的工具。 它可以帮助观众了解哪些因素对结果影响最大。它基于帕累托原则
- 我们将研究一种判别式分类方法,其中直接学习评估 g(x)所需的 w 参数。我们将使用感知器学习算法。感知器学习算法很容易实现,但为了节省时间
- <?php/*======================================事务处理==================
- 平时在PL/SQL中的编程中遇到一些问题,这里以问答的形式来进行把它们总结下来,以供大家分享。1、当需要向表中装载大量的数据流或者需要处理大
- 在程序中定义一个变量时,这个变量是有作用范围的,变量的作用范围被称为它的作用域。根据定义变量的位置,变量分为两种:局部变量:在函数中定义的变
- 无论哪种编程语言,时间肯定都是非常重要的部分,今天来看一下python如何来处理时间和python定时任务,注意咯:本篇所讲是python3
- 本文实例分析了python动态性强类型用法。分享给大家供大家参考。具体如下:Python变量声明和定义与C#不同,Python在使用变量之前
- 初识条件判断(逻辑判断)逻辑判断与逻辑语句什么是逻辑判断? —> 对于一件事情的正确与否的判断,即 真假的判断;在
- 字体的处理在网页设计中无论怎么强调也不为过,毕竟网页使用来传递信息的,而最经典最直接的信息传递方式就是文字,所以,了解一点字体的基本知识对于
- 简介mplcursors包也可以为matplotlib提供交互式的数据光标(弹出式注释框),它的灵感来源于mpldatacursor包,可以