python版单链表反转
作者:xiaoming_tju 发布时间:2021-08-20 17:11:12
本文实例为大家分享了python实现单链表反转的具体代码,供大家参考,具体内容如下
代码如下:
class Node(object):
def __init__(self, elem, next_=None):
self.elem = elem
self.next = next_
def reverseList(head):
if head == None or head.next==None: # 若链表为空或者仅一个数就直接返回
return head
pre = None
next = None
while(head != None):
next = head.next # 1
head.next = pre # 2
pre = head # 3
head = next # 4
return pre
if __name__ == '__main__':
l1 = Node(3) # 建立链表3->2->1->9->None
l1.next = Node(2)
l1.next.next = Node(1)
l1.next.next.next = Node(9)
l = reverseList(l1)
print (l.elem, l.next.elem, l.next.next.elem, l.next.next.next.elem)
原始单链表:
反转后单链表:
反转过程如下:
第一步:next = head.next
将 head.next 赋值给 next 变量,即next 指向了节点2,先将节点2 保存起来。
第二步:head.next = pre (初始pre==None)
将 pre 变量赋值给 head.next,即 此时节点1 指向了 None
第三步:pre = head
将 head 赋值给了 pre,即 pre 指向节点1,将节点1 设为“上一个节点”
第四步:head = next
将 next 赋值给 head,即 head 指向了节点2,此时节点2 设为“头节点”
第一次循环完毕,进入第二次循环,如下图:
第一步:next = head.next
将 head.next 赋值给 next 变量,即 next 指向了节点3,先将节点3 保存起来。
第二步:head.next = pre (此时的pre已经不为None)
将 pre 赋值给 head.next,pre 在上一次循环的时候指向了节点1,那么这一步的意义就是节点2 指向了 节点1,完成1和2节点的反转。
第三步:pre = head
将 head 赋值给了 pre,即 pre 指向节点2,将节点2 设为“上一个节点”
第四步:head = next
将 next 赋值给 head,即 head 指向了节点3。此时节点3 设为“头节点”
第二次循环完毕,以此类推!第三次第四次第五次循环。最后反转成如下图
若干注意点:
(1)帮助记忆图:
(2)当前头节点的下一个节点一定要保存(比如:当前头节点为2,先将节点3 保存起来)
(3)实现反转的key point: head.next = pre
来源:https://blog.csdn.net/gongliming_/article/details/88712221
猜你喜欢
- 前言昨天因为小程序功能要获取小程序程序码,看了微信文档爬了好多坑。(留一下记录以防后面被坑)操作因为我获取到了微信那里的图片的图片流一直不知
- 需求在4*4的图片中,比较外围黑色像素点和内圈黑色像素点个数的大小将图片分类如上图图片外围黑色像素点5个大于内圈黑色像素点1个分为0类反之1
- 本文实例讲述了Python requests库用法。分享给大家供大家参考,具体如下:requests是Python中一个第三方库,基于 ur
- 现在不写asp了这次我将我以前沉淀下的一些函数库共享给大家,希望能给初学者启示,给老手也有所帮助吧.先谢谢大家支持! <%@
- 在本地windows机器开发的Django项目运行正常,放到服务器上后响应超慢,花了一整个工作日没找到原因(非常绝望),又花了一整个周末才找
- 第一种方式: $(document).ready(function(){ $("#clickme").click(fun
- ADO对象: Connection Command Recordset Record Stream ASP支持的对象很多,可以自己编写COM
- 请问,如何在ACCESS数据库和SQL SERVER数据库中查询?
- 1. ASCII 返回与指定的字符对应的十进制数; SQL> select ascii(A) A,ascii(a) a,ascii(0
- 文件名:Awa_temp.Class.asp 代码如下:<% 'Crazy蛙!模板操作类 '作者C
- 进程、线程和协程进程的定义:进程,是计算机中已运行程序的实体。程序本身只是指令、数据及其组织形式的描述,进程才是程序的真正运行实例。线程的定
- 1. 特定版本的python-opencv安装在https://www.lfd.uci.edu/~gohlke/pythonlibs/#op
- 分析我们都知道一个可迭代对象可以通过iter()可以返回一个迭代器。如果想要一个对象称为可迭代对象,即可以使用for,那么必须实现__ite
- 如果看到特别感兴趣的抖音vlogger的视频,想全部dump下来,如何操作呢?下面介绍介绍如何使用python导出特定用户所有视频信息抓包分
- 本文实例讲述了JS弹出窗口插件zDialog简单用法。分享给大家供大家参考,具体如下:因为没有元素可以显示到Frameset上面去,所以重新
- 什么是异步?含义 :双方不需要共同的时钟,也就是接收方不知道发送方什么时候发送,所以在发送的信息中就要有提示接收方开始接收的信息,如开始位,
- 前言上网浏览网页的时候,看见好的内容免不了要使用复制粘贴,但是我们看到的内容、心里想要的内容和实际粘贴后的内容往往不一致。数据的获取始于复制
- 按照本地时间的javascript date.getDate()方法返回月份的一天,在指定日期。由getDate返回的值是1到3
- upload.htm <html><head><title>网站维护 -
- 目的: 根据传入的选择器类型选出第一个符合的DOM对象。 ①可以通过id获取DOM对象,例如 $("#adom