网站建设怎么设计更加吸引人,wordpress强大之处,wordpress 进去管理,室内设计培训机构多少钱导读
这篇文章主要介绍了Python实现链表反转的方法,结合实例形式分析了Python迭代法与递归法实现链表反转的相关操作技巧与注意事项,需要的朋友可以参考下
本文实例讲述了Python实现链表反转的方法。分享给大家供大家参考#xff0c;具体如下#xff1a;
Python实现链表反转
…导读
这篇文章主要介绍了Python实现链表反转的方法,结合实例形式分析了Python迭代法与递归法实现链表反转的相关操作技巧与注意事项,需要的朋友可以参考下
本文实例讲述了Python实现链表反转的方法。分享给大家供大家参考具体如下
Python实现链表反转
链表反转while迭代实现
•链表的反转引入一个cur_node变量表示当前节点同时需要引入一个变量new_link表示反转后的新链表while循环内还需中间变量tmp存放当前节点的后继节点防止原链表数据丢失。
•在while循环内(循环条件为 cur_node !None若设置为cur_node.next将导致最后一个节点无法反转到新链表) •首先需要将当前节点的后继节点传递给中间变量tmp
•当前节点指向新链表new_link
•当前节点指向新链表new_link后新链表头结点更新为当前节点cur_node
•将中间变量tmp传递给cur_node开始新一轮循环
•循环结束后返回 new_link
class Node(object):
def __init__(self, valueNone, nextNone):
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
运行结果递归实现
•递归实现与while实现不同在于递归首先找到新链表的头部节点然后递归栈返回层层反转
•首先找到新链表的头结点即遍历到原链表的最后一个节点返回最后节点
•执行函数体后续代码将原链表中的尾节点指向原尾节点的前置节点
•前置节点的指针指向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实现链表反转的方法_【迭代法与递归法】到此结束