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 20 Python
Python的string模块中的Template类字符串模板用法
Jun 27 Python
Python中functools模块的常用函数解析
Jun 30 Python
python中is与双等于号“==”的区别示例详解
Nov 21 Python
python3操作微信itchat实现发送图片
Feb 24 Python
详解Django模版中加载静态文件配置方法
Jul 21 Python
深入了解如何基于Python读写Kafka
Dec 31 Python
在 Pycharm 安装使用black的方法详解
Apr 02 Python
python如何使用腾讯云发送短信
Sep 17 Python
Jupyter Notebook 如何修改字体和大小以及更改字体样式
Jun 03 Python
高考要来啦!用Python爬取历年高考数据并分析
Jun 03 Python
Python使用Web框架Flask开发项目
Jun 01 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 读取文件的正确方法
2009/04/29 PHP
php+jquery编码方面的一些心得(utf-8 gb2312)
2010/10/12 PHP
destoon供应信息title调用出公司名称的方法
2014/08/22 PHP
PHP基于单例模式实现的mysql类
2016/01/09 PHP
Zend Framework教程之配置文件application.ini解析
2016/03/10 PHP
微信随机生成红包金额算法php版
2016/07/21 PHP
Laravel find in set排序实例
2019/10/09 PHP
jQuery性能优化28条建议你值得借鉴
2013/02/16 Javascript
Jquery中使用setInterval和setTimeout的方法
2013/04/08 Javascript
jQuery中size()方法用法实例
2014/12/27 Javascript
JavaScript实现选择框按比例拖拉缩放的方法
2015/08/04 Javascript
AngualrJS中的Directive制作一个菜单
2016/01/26 Javascript
JavaScript常用判断写法大全(推荐)
2016/05/30 Javascript
JS奇技之利用scroll来监听resize详解
2017/06/15 Javascript
JavaScript学习笔记之函数记忆
2017/09/06 Javascript
vue实现商城购物车功能
2017/11/27 Javascript
JS实现的文字间歇循环滚动效果完整示例
2018/02/13 Javascript
JS拖拽排序插件Sortable.js用法实例分析
2019/02/20 Javascript
如何让Nodejs支持H5 History模式(connect-history-api-fallback源码分析)
2019/05/30 NodeJs
Layer组件多个iframe弹出层打开与关闭及参数传递的方法
2019/09/25 Javascript
js实现双人五子棋小游戏
2020/05/28 Javascript
vue穿梭框实现上下移动
2021/01/29 Vue.js
[58:58]2018DOTA2亚洲邀请赛 4.4 淘汰赛 TNC vs VG 第二场
2018/04/05 DOTA
pytyon 带有重复的全排列
2013/08/13 Python
Python实现的Excel文件读写类
2015/07/30 Python
python绘制双柱形图代码实例
2017/12/14 Python
PYQT5设置textEdit自动滚屏的方法
2019/06/14 Python
python实现桌面气泡提示功能
2019/07/29 Python
解决pyqt5异常退出无提示信息的问题
2020/04/08 Python
python 获取计算机的网卡信息
2021/02/18 Python
什么是.net的Remoting技术
2016/07/08 面试题
Java中各种基本数据类型的默认值都是什么
2016/12/22 面试题
爱国卫生月实施方案
2014/02/21 职场文书
2014个人年终工作总结范文
2014/12/15 职场文书
浅谈CSS不规则边框的生成方案
2021/05/25 HTML / CSS
用python修改excel表某一列内容的操作方法
2021/06/11 Python