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用fork来创建子进程注意事项
Jul 03 Python
python生成日历实例解析
Aug 21 Python
高效测试用例组织算法pairwise之Python实现方法
Jul 19 Python
Django中间件工作流程及写法实例代码
Feb 06 Python
如何实现删除numpy.array中的行或列
May 08 Python
Python安装lz4-0.10.1遇到的坑
May 20 Python
Python代码打开本地.mp4格式文件的方法
Jan 03 Python
利用Django模版生成树状结构实例代码
May 19 Python
django多种支付、并发订单处理实例代码
Dec 13 Python
Python基础之高级变量类型实例详解
Jan 03 Python
Pytorch to(device)用法
Jan 08 Python
pandas 操作 Excel操作总结
Mar 31 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中is_null,empty,isset,unset 的区别详细介绍
2013/04/28 PHP
解析php入库和出库
2013/06/25 PHP
php使用pack处理二进制文件的方法
2014/07/03 PHP
phpinfo() 中 Local Value(局部变量)Master Value(主变量) 的区别
2016/02/03 PHP
php封装的单文件(图片)上传类完整实例
2016/10/18 PHP
PHP实现求解最长公共子串问题的方法
2017/11/17 PHP
TNC vs BOOM BO3 第三场2.13
2021/03/10 DOTA
OfflineSave离线保存代码再次发布使用说明
2007/05/23 Javascript
javascript入门·对象属性方法大总结
2007/10/01 Javascript
javascript使用正则控制input输入框允许输入的值方法大全
2014/06/19 Javascript
jQuery 动态云标签插件
2014/11/11 Javascript
jquery编写Tab选项卡滚动导航切换特效
2020/07/17 Javascript
用Vue.extend构建消息提示组件的方法实例
2017/08/08 Javascript
使用vue-cli(vue脚手架)快速搭建项目的方法
2018/05/21 Javascript
vue左侧菜单,树形图递归实现代码
2018/08/24 Javascript
vue和better-scroll实现列表左右联动效果详解
2019/04/29 Javascript
express启用https使用小记
2019/05/21 Javascript
WEB前端性能优化的7大手段详解
2020/02/04 Javascript
[36:16]完美世界DOTA2联赛PWL S3 access vs Rebirth 第一场 12.19
2020/12/24 DOTA
python在windows下创建隐藏窗口子进程的方法
2015/06/04 Python
在Python中实现shuffle给列表洗牌
2018/11/08 Python
Python登录系统界面实现详解
2019/06/25 Python
Django框架安装方法图文详解
2019/11/04 Python
Python list运算操作代码实例解析
2020/01/20 Python
使用Keras实现Tensor的相乘和相加代码
2020/06/18 Python
基于第一个PhoneGap(cordova)的应用详解
2013/05/03 HTML / CSS
意大利值得信赖的在线超级药房:PillolaStore
2020/02/05 全球购物
《学会待客》教学反思
2014/02/22 职场文书
2014年社区计生工作总结
2014/11/18 职场文书
培训计划通知
2015/07/15 职场文书
90行Python代码开发个人云盘应用
2021/04/20 Python
Django实现聊天机器人
2021/05/31 Python
详解JAVA中的OPTIONAL
2021/06/14 Java/Android
Mysql排序的特性详情
2021/11/01 MySQL
bat批处理之字符串操作的实现
2022/03/16 Python
Vue ECharts实现机舱座位选择展示功能
2022/05/15 Vue.js