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查看多台服务器进程的脚本分享
Jun 11 Python
用Python进行基础的函数式编程的教程
Mar 31 Python
python中正则的使用指南
Dec 04 Python
python2.6.6如何升级到python2.7.14
Apr 08 Python
pycharm运行程序时在Python console窗口中运行的方法
Dec 03 Python
python实现自动化报表功能(Oracle/plsql/Excel/多线程)
Dec 02 Python
Python字典深浅拷贝与循环方式方法详解
Feb 09 Python
python datetime处理时间小结
Apr 16 Python
Python 利用argparse模块实现脚本命令行参数解析
Dec 28 Python
Python 机器学习工具包SKlearn的安装与使用
May 14 Python
python数字类型和占位符详情
Mar 13 Python
python 安全地删除列表元素的方法
Mar 16 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
PHP入门学习笔记之一
2010/10/12 PHP
抓取并下载CSS中所有图片文件的php代码
2011/09/26 PHP
PHP伪造来源HTTP_REFERER的方法实例详解
2015/07/06 PHP
怎样搭建PHP开发环境
2015/07/28 PHP
PHP实现RTX发送消息提醒的实例代码
2017/01/03 PHP
php记录搜索引擎爬行记录的实现代码
2018/03/02 PHP
javascript中关于break,continue的特殊用法与介绍
2012/05/24 Javascript
Javascript 遮罩层和加载效果代码
2013/08/01 Javascript
jquery form 隐藏的input 选择
2014/04/29 Javascript
用js模拟struts2的多action调用示例
2014/05/19 Javascript
jQuery $.extend()用法总结
2014/06/15 Javascript
实现js保留小数点后N位的代码
2014/11/13 Javascript
$.extend 的一个小问题
2015/06/18 Javascript
测试IE浏览器对JavaScript的AngularJS的兼容性
2015/06/19 Javascript
jQuery实现导航滚动到指定内容效果完整实例【附demo源码下载】
2016/09/20 Javascript
图片上传之FileAPI与NodeJs
2017/01/24 NodeJs
Vue.js仿Metronic高级表格(一)静态设计
2017/04/17 Javascript
vue实现一个移动端屏蔽滑动的遮罩层实例
2017/06/08 Javascript
详解Angular中通过$location获取地址栏的参数
2018/08/02 Javascript
浅谈vue方法内的方法使用this的问题
2018/09/15 Javascript
JS中通过url动态获取图片大小的方法小结(两种方法)
2018/10/31 Javascript
JS实现倒序输出的几种常用方法示例
2019/04/13 Javascript
2019最新21个MySQL高频面试题介绍
2020/02/06 Javascript
[02:30]DOTA2放量测试专访海涛:呼吁保护新手玩家
2013/08/26 DOTA
人脸识别经典算法一 特征脸方法(Eigenface)
2018/03/13 Python
Python 寻找局部最高点的实现
2019/12/05 Python
python匿名函数lambda原理及实例解析
2020/02/07 Python
css3圆角样式分享自定义按钮样式
2013/12/27 HTML / CSS
canvas像素画板的实现代码
2018/11/21 HTML / CSS
用canvas显示验证码的实现
2020/04/10 HTML / CSS
英国折扣零售连锁店:QD Stores
2018/12/08 全球购物
Static Nested Class 和 Inner Class的不同
2013/11/28 面试题
2014购房个人委托书范本
2014/10/12 职场文书
重温经典:乔布斯在斯坦福大学的毕业演讲(双语)
2019/08/26 职场文书
用python实现监控视频人数统计
2021/05/21 Python
CSS极坐标的实例代码
2021/06/03 HTML / CSS