当前位置: 首页 > article >正文

如何使用 Python 实现链表的反转?

在Python中实现链表的反转可以通过几种不同的方法。这里,我将向你展示如何使用迭代和递归两种方式来反转链表。
1. 迭代方法
迭代方法是通过遍历链表,逐个节点地改变其指向来实现反转的。
class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

def reverseList(head):
    prev = None
    current = head
    while current:
        next_node = current.next
        current.next = prev
        prev = current
        current = next_node
    return prev

# 示例使用
# 创建链表 1 -> 2 -> 3 -> None
head = ListNode(1, ListNode(2, ListNode(3)))
# 反转链表
reversed_head = reverseList(head)
# 打印反转后的链表
while reversed_head:
    print(reversed_head.val, end=" -> ")
    reversed_head = reversed_head.next

2. 递归方法
递归方法是通过递归调用来反转链表,每次递归反转一个节点,直到链表的末尾。
def reverseListRecursive(head):
    if not head or not head.next:
        return head
    new_head = reverseListRecursive(head.next)
    head.next.next = head
    head.next = None
    return new_head

# 示例使用
# 创建链表 1 -> 2 -> 3 -> None
head = ListNode(1, ListNode(2, ListNode(3)))
# 反转链表
reversed_head = reverseListRecursive(head)
# 打印反转后的链表
while reversed_head:
    print(reversed_head.val, end=" -> ")
    reversed_head = reversed_head.next

这两种方法都可以有效地反转链表,选择哪种方法取决于你的偏好和具体的应用场景。迭代方法通常更节省空间,因为它不需要额外的栈空间,而递归方法在代码上更为简洁,但需要注意递归深度的问题。


http://www.kler.cn/a/428590.html

相关文章:

  • Jenkins-pipeline语法说明
  • 2024.ailx10的年终总结
  • AI Agent:AutoGPT的使用方法
  • 【基于无线电的数据通信链】Link 11 仿真测试
  • C语言之图像文件的属性
  • Linux容器(初学了解)
  • C++_关于异常处理throw-try-catch
  • MATLAB 非重叠点云提取算法(92)
  • C++的一些经典算法
  • java 服务端tcp方式接收和推送数据到c++或者qt(亲测可用)
  • 机器学习经典算法
  • C# 的GDI风车控件
  • FFmpeg+Nginx+VLC打造M3U8M3U8点播
  • STM32MX 配置CANFD收发通讯
  • Java 并发舞台:多线程小精灵的奇幻冒险之旅
  • 第二十二天 TensorFlow基础
  • Android 常用倒计时技术和实现方式
  • element UI的Cascader 级联选择器在树形列表中编辑使用
  • 使用Excel的COUNTIFS和SUMIFS函数进行高级数据分析
  • 面向对象系统的分析和设计
  • QNX的安全文件策略:SECPOL
  • Linux学习——4_DNS域名解析服务器
  • Leetcode Hot 100【堆】215. 数组中的第K个最大元素
  • 探索HTML5与CSS3的流式布局:构建响应式网页设计的新纪元
  • go返回多个errors
  • Linux驱动开发(11):SPI子系统–OLED屏实验