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中的floor()方法
May 15 Python
Python字典操作详细介绍及字典内建方法分享
Jan 04 Python
基于Pandas读取csv文件Error的总结
Jun 15 Python
python中单下划线_的常见用法总结
Jul 10 Python
Python操作mongodb数据库的方法详解
Dec 08 Python
如何使用python操作vmware
Jul 27 Python
django foreignkey(外键)的实现
Jul 29 Python
Django实现跨域的2种方法
Jul 31 Python
python 读取数据库并绘图的实例
Dec 03 Python
Django 404、500页面全局配置知识点详解
Mar 10 Python
python文件操作seek()偏移量,读取指正到指定位置操作
Jul 05 Python
Matplotlib绘制混淆矩阵的实现
May 27 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
PHPlet在Windows下的安装
2006/10/09 PHP
学习discuz php 引入文件的方法DISCUZ_ROOT
2009/06/21 PHP
深入理解PHP中的Session和Cookie
2013/06/21 PHP
thinkphp模板继承实例简述
2014/11/26 PHP
php-fpm添加service服务的例子
2018/04/27 PHP
Laravel6.0.4中将添加计划任务事件的方法步骤
2019/10/15 PHP
Laravel框架Blade模板简介及模板继承用法分析
2019/12/03 PHP
幻宇的层模拟窗口效果-提供演示和下载
2007/01/20 Javascript
利用javascript实现一些常用软件的下载导航
2009/08/03 Javascript
用Jquery实现可编辑表格并用AJAX提交到服务器修改数据
2009/12/27 Javascript
JavaScript 比较时间大小的代码
2010/04/24 Javascript
jquery 读取页面load get post ajax 四种方式代码写法
2011/04/02 Javascript
纯JavaScript实现获取onclick、onchange等事件的值
2014/12/29 Javascript
使用vue.js制作分页组件
2016/06/27 Javascript
Javascript OOP之面向对象
2016/07/31 Javascript
jQuery中绑定事件bind() on() live() one()的异同
2017/02/23 Javascript
非常实用的vue导航钩子
2017/03/20 Javascript
Vue.Draggable实现拖拽效果
2020/07/29 Javascript
JavaScript适配器模式详解
2017/10/19 Javascript
微信小程序如何获取用户信息
2018/01/26 Javascript
Layui Table js 模拟选中checkbox的例子
2019/09/03 Javascript
vue+elementUI组件table实现前端分页功能
2020/11/15 Javascript
javascript canvas API内容整理
2020/02/16 Javascript
微信小程序开发(二):页面跳转并传参操作示例
2020/06/01 Javascript
nuxt 路由、过渡特效、中间件的实现代码
2020/11/06 Javascript
Windows8下安装Python的BeautifulSoup
2015/01/22 Python
Python3中多线程编程的队列运作示例
2015/04/16 Python
Python3实现从指定路径查找文件的方法
2015/05/22 Python
Python字符串的全排列算法实例详解
2019/01/07 Python
Python必须了解的35个关键词
2020/07/16 Python
高中的职业生涯规划书
2013/12/28 职场文书
2016国培学习心得体会
2016/01/08 职场文书
python实现三次密码验证的示例
2021/04/29 Python
linux中nohup和后台运行进程查看及终止
2021/06/24 Python
教你使用Python获取QQ音乐某个歌手的歌单
2022/04/03 Python
解决vue自定义组件@click点击失效问题
2022/04/30 Vue.js