Python链表反转:迭代与递归实现详解
本文详细解析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程序设计有所帮助。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









