题目描述

  • 输入一个链表,反转链表后,输出新链表的表头

分析:

先随便表画一个链表:

这个是反转后的链表,也是我们想要的:

  • 由于链表查找元素只能从头节点开始,我们可以想到,挨个挨个的将元素的指针指向前一个元素

  • 如果链表的长度趋于无穷大,每一次反转,将会是O(n)的复杂度,所以的总的复杂度是O(n^2).

  • 这种方法时间复杂度太高!看下面的解法

解法详解:

通过循环来解决问题:

  • (1)先定义三个指针:leftPointer、midPointer、rightPointer分别指向第一、第二、第三个节点;
  • (2)让leftPointer指向空(是反转链表的尾节点):
  • (3)midPointer指向leftPointer:
  • (4)将三个指针同时向后移一位:
  • (5)midPointer指向leftPointer(和第3步一样):
  • (6)将三个指针同时向后移一位(和第4步一样):
  • (7)midPointer指向leftPointer(和第3步、第5步一样):
  • (8)反转链表完成,这时midPointer指针指向的就是反转链表的表头了;

边界条件:

  • (1)一般的情况就是上面的步骤
  • (2)头节点为None,则直接返回None
  • (3)头节点指向None,反转后还是这样子,则直接返回头节点

详细代码(Python):

# class ListNode:
#     def __init__(self, x):   # 定义链表结构
#         self.val = x
#         self.next = None
class Solution:# 返回ListNodedef ReverseList(self, pHead):     # pHead是初始链表的头节点if pHead == None:        # 若头节点为空,则直接返回None,(边界2)return Noneif pHead.next == None:    # 若头节点指向空,则直接返回头节点(边界3)return pHead# 定义三个指针leftPointer、midPointer、rightPointerleftPointer = pHead          # leftPointer指向头节点 (步骤1)midPointer = pHead.next         # midPointer指向头节点的下一个节点(步骤1)rightPointer = midPointer.next     # rightPointer指向下下一个节点(步骤1)leftPointer.next = None     # 先令leftPointer,即头节点,指向空(步骤2)while rightPointer != None:     # 若指针rightPointer指向不为空,则一直遍历下去midPointer.next = leftPointer     # midPointer指向前一个节点(步骤3、5)leftPointer = midPointer        # leftPointer指针像后移动一位,到midPointer(步骤4、6)midPointer = rightPointer    # midPointer指针像后移动一位,到rightPointer(步骤4、6)rightPointer = rightPointer.next   # rightPointer指针同样向后移动一位(步骤4、6)# 循环完成后,rightPointer是指向None的,这时到达步骤6,如图很明显还没完midPointer.next = leftPointer    # 将midPointer的next指向前一个节点,(步骤7)return midPointer     # midPointer就是新的链表的表头了

反转链表详解(Python)相关推荐

  1. python链表值讲解_python数据结构之链表详解

    python数据结构之链表详解 数据结构是计算机科学必须掌握的一门学问,之前很多的教材都是用C语言实现链表,因为c有指针,可以很方便的控制内存,很方便就实现链表,其他的语言,则没那么方便,有很多都是用 ...

  2. 数学建模——智能优化之遗传算法详解Python代码

    数学建模--智能优化之遗传算法详解Python代码 import numpy as np import matplotlib.pyplot as plt from matplotlib import ...

  3. 详解 Python qrcode 二维码模块

    原文链接 摘要: 详解 Python qrcode 二维码模块. 项目地址 https://github.com/lincolnloop/python-qrcode 声明 importqrcode 使 ...

  4. java数据结构-链表详解

    文章目录 1.数据结构-链表详解 1.1单链表 1.1.1单链表节点的尾部添加 1.1.2单链表节点的自动排序添加 1.1.3单链表节点的修改 1.1.4单链表节点的删除 1.2单链表面试题 1.2. ...

  5. python import io_详解Python IO编程

    文件读写 读文件 try: # windows下utf8 f = open('./README.md', 'r', encoding='utf8', errors='ignore') print(f. ...

  6. python操作目录_详解python中的文件与目录操作

    详解python中的文件与目录操作 一 获得当前路径 1.代码1 >>>import os >>>print('Current directory is ',os. ...

  7. scrapy爬虫储存到mysql_详解Python之Scrapy爬虫教程NBA球员数据存放到Mysql数据库

    获取要爬取的URL 爬虫前期工作 用Pycharm打开项目开始写爬虫文件 字段文件items # Define here the models for your scraped items # # S ...

  8. 归并排序详解(python实现)

    归并排序详解(python实现) 因为上个星期leetcode的一道题(Median of Two Sorted Arrays)所以想仔细了解一下归并排序的实现.

  9. python open 打开是什么类型的文件-详解Python中open()函数指定文件打开方式的用法...

    文件打开方式 当我们用open()函数去打开文件的时候,有好几种打开的模式. 'r'->只读 'w'->只写,文件已存在则清空,不存在则创建. 'a'->追加,写到文件末尾 'b'- ...

  10. python利器的使用-图文详解python开发利器之ulipad的使用实践

    Ulipad是一个国人limodou编写的专业Python编辑器,它基于wxpython开发的GUI(图形化界面).下面这篇文章主要介绍了python开发利器之ulipad的使用实践,文中介绍的非常详 ...

最新文章

  1. 有趣的Github项目万里挑一 !(附论文、项目链接)
  2. 201621123028《Java程序设计》第一周学习总结
  3. 有道精品课python-网易词典在线翻译
  4. linux中EOF的用法梳理
  5. mac下完全卸载程序的方法
  6. 【c++ primer读书笔记】【第6章】函数
  7. Atitit 机器视觉图像处理与机器学习概论2017版 attilax著
  8. 邮件签名——html模板
  9. 如何用Camtasia制作简单动画?
  10. 入门级蛋白质结构查看PyMol的使用——PyMol常用命令
  11. ps -ef和ps -aux的区别
  12. HTML 关于p标签的嵌套问题
  13. Anaconda3 从navigator面板无法启动
  14. 小程序的生命周期和页面的生命周期
  15. 10大Android手机杀毒软件
  16. python期中考试试卷分析_期中考试考试试卷分析及反思
  17. 售价39.98万元 集度ROBO-01探月限定版追加1000体验官名额
  18. html5设计博客论文,基于HTML5的综合类博客设计与实现-计算机本科毕业论文
  19. cad转pdf怎么变成黑白?说一个办法
  20. ettercap内网DNS劫持实验

热门文章

  1. 《红周刊》独家对话芒格:你可以随自己喜欢一辈子不理性,那必然承受糟糕结果
  2. Rust: codewars的Molecule to atoms
  3. (转)今天的人工智能比肩工业革命毫不夸张
  4. 阿里云马涛:云原生时代的开源操作系统长什么样
  5. ARM正式发布v9架构,确认可供应华为,不受美国出口管制约束
  6. 1500页,40万字,阿里淘系技术2020技术年货来了!
  7. plc简易电子计算机设计,PLC-电子计算器设计.doc
  8. 【三维路径规划】基于matlab粒子群算法无人机山地三维路径规划【含Matlab源码 1831期】
  9. 【物理应用】基于Matlab GUI超声场可视化仿真模拟【含Matlab源码 1494期】
  10. 【优化覆盖】基于matlab粒子群算法求解传感器覆盖优化问题【含Matlab源码 1493期】