python实现反转部分单向链表


Posted in Python onSeptember 27, 2018

题目:

给定一个单链表的头指针 head, 以及两个整数 a 和 b,在单链表中反转 linked_list[a-b] 的结点,然后返回整个链表的头指针。
例如:
单链表[1000, 5, 12, 100, 45, ‘cecil', 999],
a = 4, b = 6,
返回的链表是[1000, 5, 12, 100, 999, ‘cecil', 45],也就是说,
a 和 b分别为索引值。如果a 和 b 超过了索引范围就返回错误。

代码:

我写的不够简洁,比较繁琐,但是能跑通,繁琐的原因在于我使用了 for 循环,对于 a == 0 的情况 for 循环无法识别。

def reverse_part_linked_list(head, a, b): # 反转部分链表结点,a, b分别为索引值
    if head == 0:
      print "Empty linked list. No need to reverse."
      return head
    p = head
    length = 1
    while p != 0:
      length += 1
      p = p.next
    if length == 1:
      print "No need to reverse."
      return head
    if a < 0 or b > length-1 or a >= b:
      raise Exception("The given 'from' value and 'to' value is wrong.")
    p = head

    if a == 0: # 由于 for 循环中 xrange 的范围问题,我就分情况写了。
      tail, head = p, p
      pre = 0
      for _ in xrange(a, b+1):
        p = p.next
        head.next = pre
        pre = head
        head = p
      tail.next = p
      return head
    else:
      for _ in xrange(1, a):
        p = p.next
      front, tail, head = p, p, p
      p = p.next
      pre = 0
      for _ in xrange(a+1, b+2):
        p = p.next
        head.next = pre
        pre = head
        head = p
      front.next = pre
      tail.next = p
      return head

分析:

核心依然是反转链表的指针问题,均是一遍循环,时间复杂度o(n),空间复杂度为若干个变量。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python编写生成验证码的脚本的教程
May 04 Python
使用wxPython获取系统剪贴板中的数据的教程
May 06 Python
Python安装Numpy和matplotlib的方法(推荐)
Nov 02 Python
基于Python List的赋值方法
Jun 23 Python
Python 删除连续出现的指定字符的实例
Jun 29 Python
python实现祝福弹窗效果
Apr 07 Python
Python直接赋值、浅拷贝与深度拷贝实例分析
Jun 18 Python
python用for循环求和的方法总结
Jul 08 Python
用python写一个定时提醒程序的实现代码
Jul 22 Python
如何修复使用 Python ORM 工具 SQLAlchemy 时的常见陷阱
Nov 19 Python
深入分析python 排序
Aug 24 Python
Python unittest discover批量执行代码实例
Sep 08 Python
python八皇后问题的解决方法
Sep 27 #Python
python判断数字是否是超级素数幂
Sep 27 #Python
Flask实现跨域请求的处理方法
Sep 27 #Python
python环形单链表的约瑟夫问题详解
Sep 27 #Python
transform python环境快速配置方法
Sep 27 #Python
python如何求解两数的最大公约数
Sep 27 #Python
Python3中内置类型bytes和str用法及byte和string之间各种编码转换 问题
Sep 27 #Python
You might like
php设计模式小结
2013/02/15 PHP
jQuery 瀑布流 浮动布局(一)(延迟AJAX加载图片)
2012/05/23 Javascript
浅谈javascript的Touch事件
2015/09/27 Javascript
JS操作COOKIE实现备忘记录的方法
2016/04/01 Javascript
原生JS封装ajax 传json,str,excel文件上传提交表单(推荐)
2016/06/21 Javascript
nodejs连接mysql数据库简单封装示例-mysql模块
2017/04/10 NodeJs
Vue实现选择城市功能
2017/05/27 Javascript
laydate 显示结束时间不小于开始时间的实例
2017/08/11 Javascript
React Native时间转换格式工具类分享
2017/10/24 Javascript
springmvc接收jquery提交的数组数据代码分享
2017/10/28 jQuery
详细分析jsonp的原理和实现方式
2017/11/20 Javascript
JS 使用 window对象的print方法实现分页打印功能
2018/05/16 Javascript
在vue中使用SockJS实现webSocket通信的过程
2018/08/29 Javascript
解决vuejs 使用value in list 循环遍历数组出现警告的问题
2018/09/26 Javascript
Node.js使用MongoDB的ObjectId作为查询条件的方法
2019/09/10 Javascript
原生JavaScript创建不可变对象的方法简单示例
2020/05/07 Javascript
vue页面引入three.js实现3d动画场景操作
2020/08/10 Javascript
vue在App.vue文件中监听路由变化刷新页面操作
2020/08/14 Javascript
[02:43]2014DOTA2国际邀请赛 官方Alliance战队纪录片
2014/07/14 DOTA
[51:06]2018DOTA2亚洲邀请赛3月29日 小组赛A组 KG VS Liquid
2018/03/30 DOTA
Python标准库之循环器(itertools)介绍
2014/11/25 Python
Python和Perl绘制中国北京跑步地图的方法
2016/03/03 Python
Python使用OpenCV进行标定
2018/05/08 Python
解决pyinstaller打包exe文件出现命令窗口一闪而过的问题
2018/10/31 Python
Python3解释器知识点总结
2019/02/19 Python
python实现根据给定坐标点生成多边形mask的例子
2020/02/18 Python
在python中使用pymysql往mysql数据库中插入(insert)数据实例
2020/03/02 Python
css3背景_动力节点Java学院整理
2017/07/11 HTML / CSS
如何使用amaze ui的分页样式封装一个通用的JS分页控件
2020/08/21 HTML / CSS
IdealFit官方网站:女性蛋白质、补充剂和运动服装
2019/03/24 全球购物
LVMH旗下最大的奢侈品网站平台:24S
2020/05/24 全球购物
建筑工地门卫岗位职责
2014/04/30 职场文书
安全主题班会教案
2015/08/12 职场文书
python中opencv实现图片文本倾斜校正
2021/06/11 Python
Ajax 的初步实现(使用vscode+node.js+express框架)
2021/06/18 Javascript
小喇叭开始广播了! 四十多年前珍贵老照片
2022/05/09 无线电