python实现反转部分单向链表

 更新时间:2018年09月27日 15:58:43   作者:冬日新雨  
这篇文章主要为大家详细介绍了python实现反转部分单向链表,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

题目:

给定一个单链表的头指针 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列表操作使用示例分享

    这篇文章主要介绍了python列表操作使用示例,需要的朋友可以参考下
    2014-02-02
  • pytorch中常用的损失函数用法说明

    pytorch中常用的损失函数用法说明

    这篇文章主要介绍了pytorch中常用的损失函数用法说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • 使用jupyter notebook输出显示不完全的问题及解决

    使用jupyter notebook输出显示不完全的问题及解决

    这篇文章主要介绍了使用jupyter notebook输出显示不完全的问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • 利用Python求阴影部分的面积实例代码

    利用Python求阴影部分的面积实例代码

    这篇文章主要给大家介绍了关于利用Python求阴影部分面积的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用python具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-12-12
  • 详解Python设计模式编程中观察者模式与策略模式的运用

    详解Python设计模式编程中观察者模式与策略模式的运用

    这篇文章主要介绍了Python设计模式编程中观察者模式与策略模式的运用,观察者模式和策略模式都可以归类为结构型的设计模式,需要的朋友可以参考下
    2016-03-03
  • Python接口自动化之接口依赖

    Python接口自动化之接口依赖

    这篇文章主要介绍了python接口自动化测试之接口数据依赖的实现方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2021-08-08
  • AI生成图片Stable Diffusion环境搭建与运行方法

    AI生成图片Stable Diffusion环境搭建与运行方法

    Stable Diffusion是一种基于扩散过程的生成模型,由Ge et al.在2021年提出,该模型利用了随机变量的稳定分布,通过递归地应用扩散过程来生成高质量的图像,这篇文章主要介绍了AI图片生成Stable Diffusion环境搭建与运行,需要的朋友可以参考下
    2023-05-05
  • 在paddle中安装python-bidi出错问题及解决

    在paddle中安装python-bidi出错问题及解决

    在Paddle中安装python-bidi时遇到Rust和Cargo缺失的问题,通过安装旧版本的python-bidi(0.4.0)解决了问题
    2025-02-02
  • Python队列的定义与使用方法示例

    Python队列的定义与使用方法示例

    这篇文章主要介绍了Python队列的定义与使用方法,结合具体实例形式分析了Python定义及使用队列的具体操作技巧与注意事项,需要的朋友可以参考下
    2017-06-06
  • Python装饰器使用示例及实际应用例子

    Python装饰器使用示例及实际应用例子

    这篇文章主要介绍了Python装饰器使用示例及实际应用例子,本文给出了斐波拉契数列、注册回调函数、mysql封装、线程异步等实际使用示例,需要的朋友可以参考下
    2015-03-03

最新评论