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 相关文章推荐
仅用500行Python代码实现一个英文解析器的教程
Apr 02 Python
深入浅析Python中join 和 split详解(推荐)
Jun 30 Python
用python记录运行pid,并在需要时kill掉它们的实例
Jan 16 Python
python实现图书馆研习室自动预约功能
Apr 27 Python
Django使用HttpResponse返回图片并显示的方法
May 22 Python
详解Python 切片语法
Jun 10 Python
Python之指数与E记法的区别详解
Nov 21 Python
python itsdangerous模块的具体使用方法
Feb 17 Python
将pytorch转成longtensor的简单方法
Feb 18 Python
python3 实现口罩抽签的功能
Mar 11 Python
Python并发编程实例教程之线程的玩法
Jun 20 Python
python代码实现扫码关注公众号登录的实战
Nov 01 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
BBS(php & mysql)完整版(四)
2006/10/09 PHP
PHP4实际应用经验篇(7)
2006/10/09 PHP
如何在PHP中进行身份认证
2006/10/09 PHP
PHP插入排序实现代码
2013/04/04 PHP
浅谈laravel数据库查询返回的数据形式
2019/10/21 PHP
JS循环遍历JSON数据的方法
2014/07/08 Javascript
ECMAScript6中Map/WeakMap详解
2015/06/12 Javascript
jQuery获取字符串中出现最多的数
2016/02/22 Javascript
JS判断元素是否在数组内的实现代码
2016/03/30 Javascript
javascript中异常处理案例(推荐)
2016/10/03 Javascript
javascript基础知识讲解
2017/01/11 Javascript
史上最全JavaScript数组去重的十种方法(推荐)
2017/08/17 Javascript
jQuery实现的form转json经典示例
2017/10/10 jQuery
javaScript中"=="和"==="的区别详解
2018/03/16 Javascript
微信小程序WebSocket实现聊天对话功能
2018/07/06 Javascript
默认浏览器设置及vue自动打开页面的方法
2018/09/21 Javascript
使用Jenkins部署React项目的方法步骤
2019/03/11 Javascript
通过实例了解js函数中参数的传递
2019/06/15 Javascript
Javascript实现秒表计时游戏
2020/05/27 Javascript
vue中是怎样监听数组变化的
2020/10/24 Javascript
Python2.x版本中cmp()方法的使用教程
2015/05/14 Python
python爬虫 正则表达式使用技巧及爬取个人博客的实例讲解
2017/10/20 Python
使用python实现ANN
2017/12/20 Python
Sanic框架异常处理与中间件操作实例分析
2018/07/16 Python
python中下标和切片的使用方法解析
2019/08/27 Python
关于Tensorflow 模型持久化详解
2020/02/12 Python
python如何遍历指定路径下所有文件(按按照时间区间检索)
2020/09/14 Python
用python进行视频剪辑
2020/11/02 Python
C#实现对任一张表的数据进行增,删,改,查要求,运用Webservice,体现出三层架构
2014/07/11 面试题
软件工程师岗位职责
2013/11/16 职场文书
管理专员自荐信
2014/01/26 职场文书
入党积极分子自我鉴定
2014/02/18 职场文书
员工聘用合同范本
2015/09/21 职场文书
怎样写工作总结啊!
2019/06/18 职场文书
Javascript使用integrity属性进行安全验证
2021/11/07 Javascript
Oracle数据库事务的开启与结束详解
2022/06/25 Oracle