python版单链表反转

作者:xiaoming_tju 时间:2021-08-20 17:11:12 

本文实例为大家分享了python实现单链表反转的具体代码,供大家参考,具体内容如下

代码如下:

class Node(object):
    def __init__(self, elem, next_=None):
        self.elem = elem
        self.next = next_
 
def reverseList(head):
    if head == None or head.next==None:  # 若链表为空或者仅一个数就直接返回
        return head 
    pre = None
    next = None
    while(head != None): 
        next = head.next     # 1
        head.next = pre     # 2
        pre = head      # 3
        head = next      # 4
    return pre

if __name__ == '__main__':
    l1 = Node(3)    # 建立链表3->2->1->9->None
    l1.next = Node(2)
    l1.next.next = Node(1)
    l1.next.next.next = Node(9)
    l = reverseList(l1)
    print (l.elem, l.next.elem, l.next.next.elem, l.next.next.next.elem)

原始单链表:

python版单链表反转

反转后单链表:

python版单链表反转

反转过程如下:

python版单链表反转

第一步:next = head.next
将 head.next 赋值给 next 变量,即next 指向了节点2,先将节点2 保存起来。

第二步:head.next = pre (初始pre==None)
将 pre 变量赋值给 head.next,即 此时节点1 指向了 None

第三步:pre = head
将 head 赋值给了 pre,即 pre 指向节点1,将节点1 设为“上一个节点”

第四步:head = next
将 next 赋值给 head,即 head 指向了节点2,此时节点2 设为“头节点”

第一次循环完毕,进入第二次循环,如下图:

python版单链表反转

第一步:next = head.next
将 head.next 赋值给 next 变量,即 next 指向了节点3,先将节点3 保存起来。

第二步:head.next = pre (此时的pre已经不为None)
将 pre 赋值给 head.next,pre 在上一次循环的时候指向了节点1,那么这一步的意义就是节点2 指向了 节点1,完成1和2节点的反转。

第三步:pre = head
将 head 赋值给了 pre,即 pre 指向节点2,将节点2 设为“上一个节点”

第四步:head = next
将 next 赋值给 head,即 head 指向了节点3。此时节点3 设为“头节点”

第二次循环完毕,以此类推!第三次第四次第五次循环。最后反转成如下图

python版单链表反转

若干注意点:

(1)帮助记忆图:

python版单链表反转

(2)当前头节点的下一个节点一定要保存(比如:当前头节点为2,先将节点3 保存起来)

(3)实现反转的key point: head.next = pre

来源:https://blog.csdn.net/gongliming_/article/details/88712221

标签:python,单链表,反转
0
投稿

猜你喜欢

  • python中%格式表达式实例用法

    2022-02-05 06:59:02
  • javascript eval和JSON之间的联系

    2024-04-19 10:00:51
  • python根据文件名批量搜索文件

    2021-06-21 12:25:01
  • 简单谈谈Python中的元祖(Tuple)和字典(Dict)

    2022-12-14 03:26:26
  • Python文件和流(实例讲解)

    2023-08-02 19:11:45
  • Host localhost is not allowed to conn

    2011-02-23 12:41:00
  • oracle-快速删除重复的记录

    2008-01-16 19:12:00
  • 详解MySql基本查询、连接查询、子查询、正则表达查询

    2024-01-25 18:20:55
  • python 获得任意路径下的文件及其根目录的方法

    2022-02-02 17:32:15
  • python 直接赋值和copy的区别详解

    2023-12-14 04:08:49
  • 全网最细 Python 格式化输出用法讲解(推荐)

    2021-07-15 12:01:32
  • Python contextlib模块使用示例

    2023-08-08 16:34:23
  • 数据库连接方式汇总

    2024-01-15 22:15:06
  • Go+Kafka实现延迟消息的实现示例

    2024-05-22 10:14:29
  • MySQL中超级有用的14个小知识总结

    2024-01-26 09:01:10
  • Python原始字符串(raw strings)用法实例

    2021-05-04 18:29:27
  • Python程序慢的重要原因

    2023-10-08 16:17:40
  • Python matplotlib 动画绘制详情

    2022-04-12 14:36:52
  • python 异常捕获详解流程

    2022-06-12 15:31:04
  • PHP中单引号和双引号的区别详解

    2023-05-25 08:16:51
  • asp之家 网络编程 m.aspxhome.com