Python链表倒置的两种方法
实现链表的翻转:
思路一:
def reverse(self):
"""
翻转链表的第一种思路:依次改变结点的指向,将结点指向此结点的上一个结点,并使用pre来指向这个节点,相当于将原链表打断成了2条,在循环中依次从原链表加到新链表的头部,完成倒置
为了保证在循环时能找到此结点的下一个结点,使用变量nex引用结点的原指向
"""
if self.is_empty():
return None
# 当前节点
cur = self.__head
# 当前节点的上一个节点
pre = None
# 当前节点的下一个节点
nex = cur.next
while cur:
# 当前节点存在
cur.next = pre # 将当前节点的指向变为上一个节点
# 进行偏移
pre = cur # 这里注意,其实pre已经指向一个反向的链表
# 这里使用nex而不是cur.next,是因为cur.next已发生改变
cur = nex
if cur:
# 如果cur为None,则已遍历完毕原链表,跳出循环
nex = nex.next
self.__head = pre
return self.travel()
思路二:
def reverse(self):
if self.is_empty():
return
# 1.将链表用一个新的头部指向
new_head = self.__head
self.__head = None
# 2.遍历新的链表,依次将每个节点插入原链表的头部
while new_head:
# 注意:这里需要先赋值给cur,保证当前结点不会丢失
cur = new_head
# 将当前结点从new_head中删除
new_head = new_head.next
# 将当前结点插入__head的头部
cur.next = self.__head
self.__head = cur
return self.travel()
Python链表倒置的两种方法的更多相关文章
- 用Python计算幂的两种方法,非递归和递归法
用Python计算幂的两种方法: #coding:utf-8 #计算幂的两种方法.py #1.常规方法利用函数 #不使用递归计算幂的方法 """ def power(x, ...
- 转:python list排序的两种方法及实例讲解
对List进行排序,Python提供了两个方法 方法1.用List的内建函数list.sort进行排序 list.sort(func=None, key=None, reverse=False) Py ...
- python list排序的两种方法及实例讲解
对List进行排序,Python提供了两个方法方法1 用List的内建函数list sort进行排序list sort(func=None, key=None, reverse=False)Pytho ...
- Python修改文件的两种方法
目录: 一.以占用内存的方式修改文件 二.以占用硬盘的方式修改文件 引言 文件修改的方法从操作方式上大致可以分为两类,一种是以占用电脑内存的方式,将文件读取到内存中修改再存回硬盘:第二种方法是分别打开 ...
- python更新数据库脚本两种方法
最近项目的两次版本迭代中,根据业务需求的变化,需要对数据库进行更新,两次分别使用了不同的方式进行更新. 第一种:使用python的MySQLdb模块利用原生的sql语句进行更新 import MySQ ...
- 【Python】python更新数据库脚本两种方法
最近项目的两次版本迭代中,根据业务需求的变化,需要对数据库进行更新,两次分别使用了不同的方式进行更新. 第一种:使用python的MySQLdb模块利用原生的sql语句进行更新 1 import ...
- 使用Python生成源文件的两种方法
利用Python的字符串处理模块,开发者能够编写脚本用来生成那些格式同样的C.C++.JAVA源程序.头文件和測试文件,从而避免大量的反复工作. 本文概述两种利用Python string类生成jav ...
- python 取整的两种方法
问题简介: 要把一个浮点数(float)整数部分提取出来.比如把“2.1”变成“2”的这一过程:现在我们给这个过程起一个名字叫“取整”.那么它 在python中大致可以有两种写法 写法1)类型转换: ...
- python 调用内部类的两种方法
class Car:#外部类 class Door:#内部类 def open(self): print('open door') class Wheel: def run(self): print( ...
随机推荐
- 输出到Excel
HSSFWorkbook oBook = new HSSFWorkbook(); NPOI.SS.UserModel.ISheet oSheet = oBook.CreateSheet(); #reg ...
- anaconda 安装caffe,cntk,theano-未整理
一,anancona 安装 https://repo.anaconda.com/archive/ conda create -n caffe_gpu -c defaults python=3.6 ca ...
- sh_10_分隔线模块
sh_10_分隔线模块 def print_line(char, times): """打印单行分隔线 :param char: 分隔字符 :param times: 重 ...
- 学习日记21、IE下的Ajax需要注意的地方
上面这张图片我是封装了一个easyui下拉框,红框出则是动态传入的json数据,这串代码在google下运行不会有任何问题,但是在IE下运行则会提示缺少:,这是因为IE只识别json格式的数据,所以这 ...
- 大数据笔记(三十一)——SparkStreaming详细介绍,开发spark程序
Spark Streaming: Spark用于处理流式数据的模块,类似Storm 核心:DStream(离散流),就是一个RDD=================================== ...
- [LeetCode]-DataBase-Combine Two Tables
Table: Person +-------------+---------+ | Column Name | Type | +-------------+---------+ | PersonId ...
- docker部署Javaweb项目(jdk+tomcat+mysql)
步骤一:在主机下载安装docker,参照Centos7上安装docker 步骤二:下载Linux版本的JDK1.6和Tomcat6.0(其他项目若依赖其他版本的运行环境可选择另外版本下载),通过sec ...
- easyhook源码分析二——注入
EasyHook 中的注入方法. 函数原型 // EasyHook 中的命名比较有意思,Rh 代表的就是Remote Hook,此函数就是远程钩子的一个子过程----注入,前面的宏代表它是导出函数. ...
- linux fedora原生的快捷键操作
显示桌面: ctrl+alt+d 运行终端程序: gnome-terminal : 可以自定义快捷键: ctrl+T 等等.
- 大数据时代下EDM邮件营销的变革
根据研究,今年的EDM邮件营销的邮件发送量比去年增长了63%,许多方法可以为你收集用户数据,这些数据可以帮助企业改善自己在营销中的精准度,相关性和执行力. 最近的一项研究表明,中国800强企业当中超过 ...