本文深入解析 LeetCode 206 题「反转链表」,通过迭代法逐步调整指针方向,实现高效原地反转,助你掌握链表操作核心技巧。
核心知识点:链表反转的迭代法
链表反转是链表操作中最基础且重要的问题之一。其核心思想是逐个调整节点的指针方向,将原链表的头节点变为尾节点,尾节点变为头节点。
迭代法原理
迭代法通过维护两个指针 pre 和 cur,逐步反转链表中的节点。具体步骤如下:
-
初始化:
pre指向None,cur指向链表头节点。 -
遍历链表:在
cur不为空时,执行以下操作:- 保存
cur的下一个节点temp。 - 将
cur的next指向pre,实现反转。 - 更新
pre为cur,cur为temp。
- 保存
-
返回结果:当
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
思路解析
-
初始化:
pre指向None,cur指向链表头节点。 -
遍历链表:在
cur不为空时,执行以下操作:- 保存
cur的下一个节点temp。 - 将
cur的next指向pre,实现反转。 - 更新
pre为cur,cur为temp。
- 保存
-
返回结果:当
cur为空时,pre指向反转后链表的头节点。
总结
通过迭代法反转链表,时间复杂度为 ,空间复杂度为 ,是一种高效且原地的解决方案。掌握这一技巧,有助于解决更复杂的链表问题。