Python实现单链表中元素的反转

 更新时间:2022年05月05日 16:41:24   作者:bebr  
这篇文章主要为大家详细介绍了Python实现单链表中元素的反转,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

给定一个单链表,将其反转。其实很容易想到,只需要修改每个结点的指针指向:即令后一个结点指向前一个结点,并且将表头指针指向最后一个结点即可。

这个过程可以用循环实现,也可以用递归来实现。

1、用循环来实现:

class LNode:
    def __init__(self, elem):
        self.elem = elem
        self.pnext = None
 
def reverse(head):
    if head is None or head.pnext is None: #如果输入的链表是空或者只有一个结点,直接返回当前结点
        return head
    pre = None #用来指向上一个结点
    cur = newhead = head #cur是当前的结点。newhead指向当前新的头结点
    while cur:
        newhead = cur
        temp = cur.pnext
        cur.pnext = pre #将当前的结点的指针指向前一个结点
        pre = cur
        cur = temp
    return newhead
 
if __name__=="__main__":
    head = LNode(1)
    p1 = LNode(2)
    p2 = LNode(3)
    head.pnext = p1
    p1.pnext = p2
    p = reverse(head)
    while p:
        print(p.elem)
        p = p.pnext

2、用递归来实现:

class LNode:
    def __init__(self, elem):
        self.elem = elem
        self.pnext = None
 
def reverse(head):
    if not head or not head.pnext:
        return head
    else:
        newhead = reverse(head.pnext)
        head.pnext.pnext = head #令下一个结点的指针指向当前结点
        head.pnext = None #断开当前结点与下一个结点之间的指针指向联系,令其指向空
        return newhead
 
 
if __name__=="__main__":
    head = LNode(1)
    p1 = LNode(2)
    p2 = LNode(3)
    head.pnext = p1
    p1.pnext = p2
    p = reverse(head)
    while p:
        print(p.elem)
        p = p.pnext

以下是图解递归的详细过程:

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

相关文章

  • 状态机的概念和在Python下使用状态机的教程

    状态机的概念和在Python下使用状态机的教程

    这篇文章主要介绍了状态机的概念和在Python下使用状态机的教程,本文来自于IBM官方开发者技术文档,需要的朋友可以参考下
    2015-04-04
  • Pytorch抽取网络层的Feature Map(Vgg)实例

    Pytorch抽取网络层的Feature Map(Vgg)实例

    今天小编就为大家分享一篇Pytorch抽取网络层的Feature Map(Vgg)实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • Python Selenium破解滑块验证码最新版(GEETEST95%以上通过率)

    Python Selenium破解滑块验证码最新版(GEETEST95%以上通过率)

    这篇文章主要介绍了Python Selenium破解滑块验证码最新版(GEETEST95%以上通过率),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • Django单元测试中Fixtures用法详解

    Django单元测试中Fixtures用法详解

    这篇文章主要介绍了Django单元测试中Fixtures用法,通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • pytorch visdom安装开启及使用方法

    pytorch visdom安装开启及使用方法

    这篇文章主要介绍了pytorch visdom安装开启及使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • python对ip地址进行排序、分类的方法详解

    python对ip地址进行排序、分类的方法详解

    这篇文章主要介绍了python对ip地址进行排序、分类的方法详解,IP协议全称为“网际互连协议Internet Protocol”,IP协议是TCP/IP体系中的网络层协议,需要的朋友可以参考下
    2023-07-07
  • Python PyQt5学习之样式设置详解

    Python PyQt5学习之样式设置详解

    这篇文章主要为大家详细介绍了Python PyQt5中样式设置的相关资料,例如为标签添加背景图片、为按钮添加背景图片、设置窗口透明等,感兴趣的可以学习一下
    2022-12-12
  • python实现读取Excel内容并展示成json

    python实现读取Excel内容并展示成json

    这篇文章主要为大家详细介绍了如何使用python实现读取Excel内容并展示成json功能,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下
    2023-12-12
  • 浅谈python中常用的excel模块库

    浅谈python中常用的excel模块库

    本文主要介绍了python中常用的excel模块库,感兴趣的同学,可以参考下。
    2021-06-06
  • python 轮询执行某函数的2种方式

    python 轮询执行某函数的2种方式

    这篇文章主要介绍了python 轮询执行某函数的2种方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05

最新评论