节点类:

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. Base64编码解码 支持解码为 16进制

    https://base64.xhlylx.com/

  2. Pyomo基础学习笔记:建模组成要素的编写方法

    1.Pyomo 简介 pyomo文档[数学建模]优化模型建模语言 Pyomo 入门教程 - 知乎 (zhihu.com) Pyomo 是基于 Python 的开源软件包,主要功能是建立数学规划模型,包 ...

  3. CentOS7的一些常规操作

    1.启动或者重启sshd服务: systemctl stop sshd.service systemctl start sshd.service systemctl restart sshd.serv ...

  4. Windows库链接报错

    问题回溯 今天拿到别人已经编译好的库,发现在链接的时候出现了报错 [9/9 12.7/sec] Linking CXX shared module bin\plugins\AsensingPlugin ...

  5. ts interface

    在TypeScript中,接口(interface)用于定义对象的结构,可以描述对象的属性.方法等.下面是一个简单的例子,演示如何使用 TypeScript 接口: // 定义一个接口表示一个人的信息 ...

  6. memo(自带)

    React.memo()是一个高阶函数,它与 React.PureComponent类似,但是一个函数组件而非一个类.如果你的组件在相同 props的情况下渲染相同的结果,那么你可以通过将其包装在 R ...

  7. SQL server查看触发器是否被禁用

    1 select a.name as 触发器名,b.name as 表名, 2 case a.is_disabled when 0 then '启用' when 1 then '禁用' else '未 ...

  8. linux查看端口命令 lsof netstat

    [root@VM-4-3-centos /]# lsof -i:8881COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEnode 15526 roo ...

  9. MySQL查询关于区分字母大小写问题

    前段时间在工作中测试提出了一个BUG,让我把根据ID查询区分大小写的功能去掉,大小写都随便查,然后我在SQL的位置加上了UPPER(id) = UPPER(#{id})的写法,而同事知道这个问题后的反 ...

  10. 解析Html Canvas的卓越性能与高效渲染策略

    一.什么是Canvas 想必学习前端的同学们对Canvas 都不陌生,它是 HTML5 新增的"画布"元素,可以使用JavaScript来绘制图形. Canvas元素是在HTML5 ...