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 错误和异常代码详解
Jan 29 Python
Django中使用Celery的方法示例
Nov 29 Python
利用python和百度地图API实现数据地图标注的方法
May 13 Python
python实现植物大战僵尸游戏实例代码
Jun 10 Python
python3+PyQt5 使用三种不同的简便项窗口部件显示数据的方法
Jun 17 Python
python实现在cmd窗口显示彩色文字
Jun 24 Python
python打造爬虫代理池过程解析
Aug 15 Python
python中property属性的介绍及其应用详解
Aug 29 Python
关于初始种子自动选取的区域生长实例(python+opencv)
Jan 16 Python
给Django Admin添加验证码和多次登录尝试限制的实现
Jul 26 Python
python实现邮件循环自动发件功能
Sep 11 Python
Python实例教程之检索输出月份日历表
Dec 16 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中去除所有js,html,css代码
2010/10/12 PHP
PHP 使用MySQL管理Session的回调函数详解
2013/06/21 PHP
深入解析php中的foreach问题
2013/06/30 PHP
php实现信用卡校验位算法THE LUHN MOD-10示例
2014/05/07 PHP
关于Ext中form移除textfield方法:hide(),setVisible(false),remove()
2010/12/02 Javascript
nodejs入门详解(多篇文章结合)
2012/03/07 NodeJs
javascript实现图片跟随鼠标移动效果的方法
2015/05/13 Javascript
JQuery中层次选择器用法实例详解
2015/05/18 Javascript
jquery实现简易的移动端验证表单
2015/11/08 Javascript
详解JS中Array对象扩展与String对象扩展
2016/01/07 Javascript
jQuery soColorPacker 网页拾色器
2016/06/22 Javascript
微信小程序 框架详解及实例应用
2016/09/26 Javascript
Vue.JS入门教程之列表渲染
2016/12/01 Javascript
angularJS+requireJS实现controller及directive的按需加载示例
2017/02/20 Javascript
自己动手封装一个React Native多级联动
2018/09/19 Javascript
VUE实现可随意拖动的弹窗组件
2018/09/25 Javascript
vue-router实现嵌套路由的讲解
2019/01/19 Javascript
详解微信小程序-扫一扫 wx.scanCode() 扫码大变身
2019/04/30 Javascript
解决vue 表格table列求和的问题
2019/11/06 Javascript
vue实现数据控制视图的原理解析
2020/01/07 Javascript
解决VUEX的mapState/...mapState等取值问题
2020/07/24 Javascript
跟老齐学Python之print详解
2014/09/28 Python
Python字典操作简明总结
2015/04/13 Python
python append、extend与insert的区别
2016/10/13 Python
python批量赋值操作实例
2018/10/22 Python
Python 类的私有属性和私有方法实例分析
2019/09/29 Python
python使用pygame实现笑脸乒乓球弹珠球游戏
2019/11/25 Python
python 项目目录结构设置
2020/02/14 Python
Python 如何创建一个简单的REST接口
2020/07/30 Python
去除python中的字符串空格的简单方法
2020/12/22 Python
HTML5 Canvas画线技巧——实现绘制一个像素宽的细线
2013/08/02 HTML / CSS
新加坡网上美容店:Hermo新加坡
2019/06/19 全球购物
数学专业推荐信范文
2013/11/21 职场文书
事业单位绩效考核实施方案
2014/03/27 职场文书
个人委托书格式
2014/04/04 职场文书
mysql知识点整理
2021/04/05 MySQL