原始单链表

反转后单链表

思路:

对于每个节点来说,把她的下一个节点,改为他的上一个节点,然后把下一个节点继续变换

建两个临时变量,上一个节点pred,下一个节点next,初始化为None

第1步,开始计算节点1,当前节点为1

1)next为当前节点1的下一个节点2

2)当前节点的下一个节点改为上一个节点pred

3)上一个节点赋值为当前节点

4)当前节点赋值为next

完整代码如下:

class Node(object):def __init__(self, elem, next_=None):self.elem = elemself.next = next_def reverseList(head):if head == None or head.next == None:  # 若链表为空或者仅一个数就直接返回return headpre = Nonenext = Nonewhile (head != None):next = head.next  # 1head.next = pre  # 2pre = head  # 3head = next  # 4return preif __name__ == '__main__':l1 = Node("1")  # 建立链表3->2->1->9->Nonel1.next = Node("2")l1.next.next = Node("3")l1.next.next.next = Node("4")l=l1print(l.elem, l.next.elem, l.next.next.elem, l.next.next.next.elem)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
————————————————
版权声明:本文为CSDN博主「xiaoming_tju」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:

python反转单链表相关推荐

  1. python怎么反转单链表_单链表反转python实现代码示例

    单链表的反转可以使用循环,也可以使用递归的方式 1.循环反转单链表 循环的方法中,使用pre指向前一个结点,cur指向当前结点,每次把cur->next指向pre即可. 代码: class Li ...

  2. 数据结构 - 反转单链表(C++)

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! // 反 ...

  3. java 链表反转_剑指BAT:如何最优雅着反转单链表?

    前言 以专题的形式更新刷题贴,欢迎跟我一起学习刷题,相信我,你的坚持,绝对会有意想不到的收获.每道题会提供简单的解答,如果你有更优雅的做法,欢迎提供指点,谢谢 [题目描述] 反转单链表.例如链表为: ...

  4. Θ(n)反转单链表(算法导论第三版第十章10.2-7)

    Θ(n)反转单链表 (算法导论第三版第十章10.2-7) template<typename T> void reverses(Single_L<T> &l) {if( ...

  5. lcg_magic算法笔记:反转单链表

    文章目录 1. 题目 2. 无头结点的单链表 2.1. 原始单链表 2.2. 反转过程 2.3. 代码 2.4. 结果 2.5. Github 3. 带头结点的单链表 3.1. 初始单链表 3.2. ...

  6. 链表相关操作:创建链表、遍历链表、求链表长度、链表中删除一个节点、链表中插入一个节点、反转单链表...

    1 #include<iostream> 2 #include<stdlib.h> 3 4 typedef struct node 5 { 6 int data; 7 stru ...

  7. python实现单链表与双向链表

    首先看单链表class Chain(): def __init__(self):self.first = Noneself.length = 0def is_empty(self):"&qu ...

  8. python实现单链表快速排序升序linkedqueue_同时对多个数组进行排序

    关于 同时对多个数组进行排序的搜索结果 回答 本人学习数据结构时看到的不错的总结,共享一下了 文件有一组记录组成,记录有若干数据项组成,唯一标识记录的数据项称关键字; 排序是将文件按关键字的递增(减) ...

  9. Java反转单链表(code)

    转载自:http://poly.iteye.com/blog/1748272 主要是面试中可能会经常碰上该类似操作,尤其是稍大点公司,面试官可能并不在乎你能不能搞定该题,但是这类型题目最是能体现程序员 ...

最新文章

  1. mybatis日志功能是如何设计的?
  2. 量子领域、人工智能都是佼佼者,中国科技实力详解
  3. XYPatch,Windows XP手工升级补丁
  4. 实验十——一维数组的定义及引用
  5. Eclipse配置初始化(自用)
  6. 将openstack的Token认证信息存储在memcache中
  7. java dna框架_DNA (Java代码)
  8. python之路第一天
  9. 机器学习与算法(6)--学习矢量化
  10. Oracle Data Pump Schema 方式导入导出
  11. uwsgi 的启动、停止、重启
  12. 已知直线方程,计算直线对应的向量
  13. 解决vue项目运行npm run serve报错的问题
  14. 计算机之父:天才冯·诺依曼的一生!
  15. WIN7 声音图标不见
  16. 180902 逆向-网鼎(4-dalao)
  17. java读取局域网共享文件夹中文件并保存到本地文件夹
  18. 测试底妆的软件,你最想看的粉底液测评,我一次性测了12款!!
  19. Spring Boot搭建Web服务器,实现用户注册登录功能
  20. ESP8266-WIFI模块使用AT指令连接外网服务器

热门文章

  1. 文件系统与NoSQL分布式存储技术对比
  2. 良性代码,恶意利用:浅谈 Return-Oriented 攻击
  3. 测试自己像什么动物软件叫什么,【测试】你最像哪种动物?
  4. 自由移动的气泡_STARCCM+标准算例展示之——曳力作用下的气泡上升速度
  5. 鸿蒙系统明年上市巧,鸿蒙系统官网下载-鸿蒙系统官网下载手机版 v2.0下载-955游戏网...
  6. 最清楚的mmap()详解与源码分析
  7. php比较函数代码,php字符串比较函数
  8. mega_[MEGA DEAL] Android课程的Java基础知识(61%折扣)
  9. log4j2_使用log4j监视和筛选应用程序日志到邮件
  10. Java盗刷_一个依赖搞定 Spring Boot 反爬虫,防止接口盗刷!