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中将字典转换成其json字符串
Jul 16 Python
python黑魔法之参数传递
Feb 12 Python
Python设计足球联赛赛程表程序的思路与简单实现示例
Jun 28 Python
Python构建XML树结构的方法示例
Jun 30 Python
Python实现的选择排序算法原理与用法实例分析
Nov 22 Python
Python爬虫获取整个站点中的所有外部链接代码示例
Dec 26 Python
IntelliJ IDEA安装运行python插件方法
Dec 10 Python
对Python 除法负数取商的取整方式详解
Dec 12 Python
Python 分享10个PyCharm技巧
Jul 13 Python
python sorted函数的小练习及解答
Sep 18 Python
vue常用指令代码实例总结
Mar 16 Python
Anaconda和ipython环境适配的实现
Apr 22 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程序时遇到的三个问题
2012/01/17 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
2017/07/19 PHP
javascript+dom树型菜单类,希望朋友们一起进步
2007/05/03 Javascript
Javascript Jquery 遍历Json的实现代码
2010/03/31 Javascript
一个原生的用户等级的进度条
2010/07/03 Javascript
JQuery异步加载无限下拉框级联功能实现示例
2014/02/19 Javascript
javascript下拉框选项单击事件的例子分享
2015/03/04 Javascript
JavaScript入门基础
2015/08/12 Javascript
javascript实现无缝上下滚动特效
2015/12/16 Javascript
[原创]Javascript 实现广告后加载 可加载百度谷歌联盟广告
2016/05/11 Javascript
JavaScript数组迭代方法
2017/03/03 Javascript
Angular2中如何使用ngx-translate进行国际化
2017/05/21 Javascript
AngularJS实现controller控制器间共享数据的方法示例
2017/10/30 Javascript
JS原型继承四步曲及原型继承图一览
2017/11/28 Javascript
Angular 容器部署的方法
2018/04/17 Javascript
Vue项目从webpack3.x升级webpack4不完全指南
2019/04/28 Javascript
开源一个微信小程序仪表盘组件过程解析
2019/07/30 Javascript
vue跳转方式(打开新页面)及传参操作示例
2020/01/26 Javascript
解决vue动态下拉菜单 有数据未反应的问题
2020/08/06 Javascript
[03:17]DOTA2-DPC中国联赛1月29日Recap集锦
2021/03/11 DOTA
Python检测一个对象是否为字符串类的方法
2015/05/21 Python
轻量级的Web框架Flask 中模块化应用的实现
2017/09/11 Python
浅谈Django学习migrate和makemigrations的差别
2018/01/18 Python
pandas使用之宽表变窄表的实现
2020/04/12 Python
pandas中的ExcelWriter和ExcelFile的实现方法
2020/04/24 Python
Python requests.post方法中data与json参数区别详解
2020/04/30 Python
canvas画布实现手写签名效果的示例代码
2019/04/23 HTML / CSS
仿CSDN Blog返回页面顶部功能实现原理及代码
2013/06/30 HTML / CSS
几道PHP面试题
2013/04/14 面试题
大唐电信科技股份有限公司java工程师面试经历
2016/12/09 面试题
介绍一下Linux文件的记录形式
2012/04/18 面试题
中间件的定义
2016/08/09 面试题
医院办公室主任职责
2013/12/29 职场文书
财产公证书
2014/04/10 职场文书
党的群众路线调研报告
2014/11/03 职场文书
导游词之金鞭溪风景区
2019/09/12 职场文书