【力扣-206. 反转链表 ✨】Python笔记

0 阅读2分钟

本文深入解析 LeetCode 206 题「反转链表」,通过迭代法逐步调整指针方向,实现高效原地反转,助你掌握链表操作核心技巧。

核心知识点:链表反转的迭代法

链表反转是链表操作中最基础且重要的问题之一。其核心思想是逐个调整节点的指针方向,将原链表的头节点变为尾节点,尾节点变为头节点。

迭代法原理

迭代法通过维护两个指针 precur,逐步反转链表中的节点。具体步骤如下:

  1. 初始化pre 指向 Nonecur 指向链表头节点。

  2. 遍历链表:在 cur 不为空时,执行以下操作:

    • 保存 cur 的下一个节点 temp
    • curnext 指向 pre,实现反转。
    • 更新 precurcurtemp
  3. 返回结果:当 cur 为空时,pre 指向反转后链表的头节点。

题目解析:LeetCode 206. 反转链表

题目描述

给你单链表的头节点 head,请你反转链表,并返回反转后的链表。

示例

输入:head = [1,2,3,4,5]

输出:[5,4,3,2,1]

代码实现

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
        cur = head
        pre = None
        while cur:
            temp = cur.next
            cur.next = pre
            pre = cur
            cur = temp
        return pre

思路解析

  1. 初始化pre 指向 Nonecur 指向链表头节点。

  2. 遍历链表:在 cur 不为空时,执行以下操作:

    • 保存 cur 的下一个节点 temp
    • curnext 指向 pre,实现反转。
    • 更新 precurcurtemp
  3. 返回结果:当 cur 为空时,pre 指向反转后链表的头节点。

总结

通过迭代法反转链表,时间复杂度为 O(n)O(n),空间复杂度为 O(1)O(1),是一种高效且原地的解决方案。掌握这一技巧,有助于解决更复杂的链表问题。