Python链表反转:迭代与递归实现详解

夏知夏
夏知夏
发布时间:2026-10-13 | 4人浏览过
原创

本文详细解析Python中链表反转的两种核心实现方式:迭代法与递归法。迭代法通过cur_node、new_link和tmp三个变量在while循环中逐步调整指针指向,确保数据不丢失;递归法则先深入至尾节点作为新头,再逐层回溯调整指针并置空原next以防止死循环。文章提供完整代码与运行结果,适合Python初学者理解指针操作与递归逻辑。

Python链表反转概述

本文介绍Python中链表反转的具体实现方法,供读者参考学习。

Python实现链表反转

迭代法实现链表反转

链表反转(while迭代实现):

  • 在反转过程中,引入cur_node变量表示当前处理的节点,同时使用new_link变量记录反转后新链表的头部。在while循环内部,还需要一个中间变量tmp来暂存当前节点的后继节点,以避免原链表数据在指针重定向后丢失。
  • 在while循环内(循环条件为 cur_node !=None,若设置为cur_node.next将导致最后一个节点无法反转到新链表):
    • 首先,将当前节点的后继节点赋值给中间变量tmp。
    • 接着,将当前节点的next指针指向新链表new_link。
    • 当当前节点指向新链表后,更新新链表的头结点为当前节点cur_node。
    • 将中间变量tmp的值赋给cur_node,从而移动到原链表的下一个节点,开始下一轮循环。
    • 当循环结束时,返回new_link作为反转后链表的头节点。

迭代法代码实现


class Node(object):
  def __init__(self, value=None, next=None):
    self.value = value
    self.next = next

  @staticmethod
  def reverse(head):
    cur_node = head # 当前节点
    new_link = None # 表示反转后的链表
    while cur_node != None:
      tmp = cur_node.next # cur_node后续节点传递给中间变量
      cur_node.next = new_link  # cur_node指向new_link
      new_link = cur_node  # 反转链表更新,cur_node为新的头结点
      cur_node = tmp  # 原链表节点后移一位
    return new_link

link = Node(1, Node(2, Node(3, Node(4, Node(5, Node(6, Node(7, Node(8, Node(9)))))))))
root = Node.reverse(link)
while root:
    print(root.value)
    root =root.next

运行结果:

9 8 7 6 5 4 3 2 1

递归法实现链表反转

递归实现:

  • 递归实现与while迭代方式不同,它首先递归找到新链表的头部节点(即原链表的最后一个节点),然后在递归栈返回的过程中,层层反转指针。
  • 首先找到新链表的头结点,即遍历到原链表的最后一个节点并返回该节点。
  • 执行函数体剩余代码,将原链表中的尾节点指向其前置节点。
  • 将前置节点的next指针指向None,以防止出现死循环。
  • 返回新链表的头部节点至上一层函数,重复上述操作直至所有节点处理完毕。

递归法代码实现


  def reverse2(head):
    if head.next == None: # 递归停止的基线条件
      return head
    new_head = reverse2(head.next)
    head.next.next = head # 当前层函数的head节点的后续节点指向当前head节点
    head.next = None # 当前head节点指向None
    return new_head

更多关于Python相关内容感兴趣的读者可查看本站专题:《Python数据结构与算法教程》、《Python加密解密算法与技巧总结》、《Python编码操作技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》

希望本文所述对大家Python程序设计有所帮助。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表