节点类:

1 class ListNode(object):
2 def __init__(self, x):
3 self.val = x
4 slef.next = None

反转单向链表的函数如下:

1 def reverseList(head):
2 pre = None
3 while head is not None:
4 next = head.next
5 head.next = pre
6 pre = head
7 head = next
8 return pre

第一次循环

第一步:

next = head.next 
将 head.next 赋值给 next 变量,也就是说 next 指向了节点2,先将节点2 保存起来。

第二步:

head.next = pre 
将 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 赋值给 head.next,pre 在上一次循环的时候指向了节点1,那么这一步的意义就是节点2 指向了 节点1,完成一次反转

第三步:

pre = head

将 head 赋值给了 pre,即 pre 指向节点2,将节点2 设为“上一个节点”

第四步:

head = next

将 next 赋值给 head,即 head 指向了节点3。将节点3 设为“头节点”

第二次循环完毕,以此类推!第三次第四次第五次循环。就可以完成翻转

总结

  • 保存当前头节点的下一个节点(当前头节点为2,先将节点3 保存起来)
  • 将当前头节点的下一个节点指向 “上一个节点”(当前头节点2 指向了 (“上一个节点”)节点1),这一步才是实现反转
  • 将当前头节点设置 “上一个节点”(将节点2 设为“上一个节点”)
  • 将保存的下一个节点设置 “头节点”(将节点3 设为“头节点”)

原文链接:https://blog.csdn.net/qq_39010254/article/details/89225061

图解翻转单向链表,超详细(python语言实现)的更多相关文章

  1. 超详细Go语言源码目录说明

    开源项目「go home」聚焦Go语言技术栈与面试题,以协助Gopher登上更大的舞台,欢迎go home~ 导读 学习Go语言源码的第一步就是了解先了解它的目录结构,你对它的源码目录了解多少呢?今天 ...

  2. [数据结构]单向链表及其基本操作(C语言)

    单向链表 什么是单向链表 链表是一种物理储存单元上非连续.非顺序的储存结构.它由一系列结点(链表中每一个元素称为结点)组成,结点可动态生成.每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存 ...

  3. 数据结构-单向链表 C和C++的实现

    数据结构,一堆数据的存放方式. 今天我们学习数据结构中的 链表: 链表的结构: 链表是一种特殊的数组,它的每个元素称为节点,每个节点包括两个部分: 数据域:存放数据,此部分与数组相同 指针域:存放了下 ...

  4. c语言面试宝典(经典,超详细)

    c语言面试宝典(经典,超详细) 2018年08月25日 09:32:19 chengxuyuan997 阅读数:7799   摘自:https://blog.csdn.net/chengxuyuan9 ...

  5. Python入门教程 超详细1小时学会Python

    Python入门教程 超详细1小时学会Python 作者: 字体:[增加 减小] 类型:转载 时间:2006-09-08我要评论 本文适合有经验的程序员尽快进入Python世界.特别地,如果你掌握Ja ...

  6. SVN入门图解教程(超详细)

    SVN入门图解教程(超详细) 一.总结 一句话总结: 二.SVN入门教程 1. 什么是SVN SVN全名Subversion,即版本控制系统.SVN与CVS一样,是一个跨平台的软件,支持大多数常见的操 ...

  7. Python入门教程 超详细1小时学会Python

    Python入门教程 超详细1小时学会Python 本文适合有经验的程序员尽快进入Python世界.特别地,如果你掌握Java和Javascript,不用1小时你就可以用Python快速流畅地写有用的 ...

  8. Python 基础学习笔记(超详细版)

    1.变量 python中变量很简单,不需要指定数据类型,直接使用等号定义就好.python变量里面存的是内存地址,也就是这个值存在内存里面的哪个地方,如果再把这个变量赋值给另一个变量,新的变量通过之前 ...

  9. [转]超详细图解:自己架设NuGet服务器

    本文转自:http://diaosbook.com/Post/2012/12/15/setup-private-nuget-server 超详细图解:自己架设NuGet服务器 汪宇杰          ...

  10. C语言实现单向链表及其各种排序(含快排,选择,插入,冒泡)

    #include<stdio.h> #include<malloc.h> #define LEN sizeof(struct Student) struct Student / ...

随机推荐

  1. HTML——input之密码框

    在 HTML 中,把 <input> 标签的 type 属性设置为 password 可以表示密码框.具体语法格式如下: <input type="password&quo ...

  2. golang 后台 苹果一键登录 sing in with apple

    本文主要展示golang后台编写苹果一键登录的代码.苹果一键登录的流程需自行去查看相关文档 这是解析 identity_token的方法来验证    如果是用code的话验证 请去 https://b ...

  3. Android 13 - Media框架(15)- OpenMax(三)

    关注公众号免费阅读全文,进入音视频开发技术分享群! 上一节学习了 media.codec 服务中的部分内容,这一节我们将一起了解 OMX IL 层的 API 以及相关的结构体等内容. 1.相关路径 以 ...

  4. C#复杂类型转为QueryString

    使用 visual studio 创建 webapi 项目,并添加 DefaultController.cs,代码如下 public class DefaultController : ApiCont ...

  5. docker创建容器数据持久化资源限制基础命令

    1. docker简介和核心概念 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化.容器是完全使 ...

  6. css 文本换行的问题

    今天测试再测试功能的时候无意间发现了这个css的bug,我们可以仔细看第一张图的最后两行,明明还没有到结尾就自动换到最后一行去了,按理说应该是撑满当前行再挤到下一行去,于是我就去看了下css的文本溢出 ...

  7. unaipp 发送验证码倒计时

    view代码 <view class="margin-top" @tap="getCheckNum()"> <view class=" ...

  8. wireshark常见使用技巧

    (1)wireshark根据报文不同字段排序 举例说明:现在有50000个1588 sync报文,我想根据报文的originalTimestamp(seconds)字段进行排序,该如何操作呢? 操作过 ...

  9. 基于.NET Core + Jquery实现文件断点分片上传

    基于.NET Core + Jquery实现文件断点分片上传 前言 该项目是基于.NET Core 和 Jquery实现的文件分片上传,没有经过测试,因为博主没有那么大的文件去测试,目前上传2G左右的 ...

  10. Android 官方AB Update说明

    Android 官方AB Update说明 A/B 系统更新,也称为无缝更新,用于确保可运行的启动系统在无线 (OTA) 更新期间能够保留在磁盘上.这样可以降低更新之后设备无法启动的可能性,也就是说, ...