Python数据结构之翻转链表


Posted in Python onFebruary 25, 2017

翻转一个链表

样例:给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null

一种比较简单的方法是用“摘除法”。就是先新建一个空节点,然后遍历整个链表,依次令遍历到的节点指向新建链表的头节点。

那样例来说,步骤是这样的:

1. 新建空节点:None
2. 1->None
3. 2->1->None
4. 3->2->1->None

代码就非常简单了:

""" 
Definition of ListNode 
 
class ListNode(object): 
 
 def __init__(self, val, next=None): 
  self.val = val 
  self.next = next 
""" 
class Solution: 
 """ 
 @param head: The first node of the linked list. 
 @return: You should return the head of the reversed linked list. 
     Reverse it in-place. 
 """ 
 def reverse(self, head): 
  temp = None 
  while head: 
   cur = head.next 
   head.next = temp 
   temp = head 
   head = cur 
  return temp 
  # write your code here

当然,还有一种稍微难度大一点的解法。我们可以对链表中节点依次摘链和链接的方法写出原地翻转的代码:

""" 
Definition of ListNode 
 
class ListNode(object): 
 
 def __init__(self, val, next=None): 
  self.val = val 
  self.next = next 
""" 
class Solution: 
 """ 
 @param head: The first node of the linked list. 
 @return: You should return the head of the reversed linked list. 
     Reverse it in-place. 
 """ 
 def reverse(self, head): 
  if head is None: 
   return head 
  dummy = ListNode(-1) 
  dummy.next = head 
  pre, cur = head, head.next 
  while cur: 
   temp = cur 
   # 把摘链的地方连起来 
   pre.next = cur.next 
   cur = pre.next 
   temp.next = dummy.next 
   dummy.next = temp 
  return dummy.next 
  # write your code here

需要注意的是,做摘链的时候,不要忘了把摘除的地方再连起来

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Python 相关文章推荐
Python使用Scrapy保存控制台信息到文本解析
Dec 27 Python
十分钟利用Python制作属于你自己的个性logo
May 07 Python
pytorch cnn 识别手写的字实现自建图片数据
May 20 Python
python中copy()与deepcopy()的区别小结
Aug 03 Python
为什么说Python可以实现所有的算法
Oct 04 Python
简单介绍django提供的加密算法
Dec 18 Python
Python + selenium + crontab实现每日定时自动打卡功能
Mar 31 Python
解决Python中报错TypeError: must be str, not bytes问题
Apr 07 Python
jupyter notebook实现显示行号
Apr 13 Python
浅析python 定时拆分备份 nginx 日志的方法
Apr 27 Python
python多线程semaphore实现线程数控制的示例
Aug 10 Python
Python selenium的这三种等待方式一定要会!
Jun 10 Python
浅析python中SQLAlchemy排序的一个坑
Feb 24 #Python
python函数的5种参数详解
Feb 24 #Python
Python实现读取文件最后n行的方法
Feb 23 #Python
Python基础教程之tcp socket编程详解及简单实例
Feb 23 #Python
Python命令启动Web服务器实例详解
Feb 23 #Python
Python 基础教程之包和类的用法
Feb 23 #Python
python安装oracle扩展及数据库连接方法
Feb 21 #Python
You might like
分享8个最佳的代码片段在线测试网站
2013/06/29 PHP
五款PHP代码重构工具推荐
2014/10/14 PHP
Yii2实现ajax上传图片插件用法
2016/04/28 PHP
PHP完全二叉树定义与实现方法示例
2017/10/09 PHP
laravel 解决多库下的DB::transaction()事务失效问题
2019/10/21 PHP
javascript比较文档位置
2008/04/08 Javascript
ext for eclipse插件安装方法
2008/04/27 Javascript
Jquery作者John Resig自己封装的javascript 常用函数
2009/11/09 Javascript
js完美的div拖拽实例代码
2014/01/22 Javascript
jquery模拟LCD 时钟的html文件源代码
2014/06/16 Javascript
JS实现的新浪微博大厅文字内容滚动效果代码
2015/11/05 Javascript
JavaScript模版引擎的基本实现方法浅析
2016/02/15 Javascript
第一篇初识bootstrap
2016/06/21 Javascript
vue.js 获取当前自定义属性值
2017/06/01 Javascript
vue组件watch属性实例讲解
2017/11/07 Javascript
vue 中filter的多种用法
2018/04/26 Javascript
深入理解vue中的slot与slot-scope
2019/04/22 Javascript
原生JS实现贪吃蛇小游戏
2020/03/09 Javascript
微信小程序 button样式设置为图片的方法
2020/06/19 Javascript
Vue.js中使用Vuex实现组件数据共享案例
2020/07/31 Javascript
vue+element table表格实现动态列筛选的示例代码
2021/01/14 Vue.js
[01:12:53]完美世界DOTA2联赛PWL S2 Forest vs SZ 第一场 11.25
2020/11/26 DOTA
Python3 操作符重载方法示例
2017/11/23 Python
Python温度转换实例分析
2018/01/17 Python
python的time模块和datetime模块实例解析
2019/11/29 Python
Python实现使用dir获取类的方法列表
2019/12/24 Python
Django ModelForm操作及验证方式
2020/03/30 Python
HTML5不支持frameset的两种解决方法
2016/11/14 HTML / CSS
运动会100米解说词
2014/01/23 职场文书
法人代表授权委托书
2014/04/08 职场文书
小学毕业典礼演讲稿
2014/09/09 职场文书
公安机关正风肃纪剖析材料
2014/10/10 职场文书
呼啸山庄读书笔记
2015/06/29 职场文书
新员工实习期个人工作总结
2015/10/15 职场文书
MYSQL(电话号码,身份证)数据脱敏的实现
2021/05/28 MySQL
mysql 数据插入优化方法之concurrent_insert
2021/07/01 MySQL