206. 反转链表
206. 反转链表
题目链接:206. 反转链表
题目描述
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
核心思考:双指针迭代
反转链表是链表操作的基石之一。
核心思想是要改变指针的方向:让当前的节点不再指向下一个节点,而是指向上一个节点。
为了做到这一点而不丢失后续节点的位置,我们需要使用三个指针来实现迭代过程:
pre:指向已经反转好部分的头节点,初始为None(因为新链表的尾部应指向空)。cur:当前正在处理的节点,初始为head。nxt:临时变量,用于暂存cur的下一个节点,防止在打断指针(执行cur.next = pre)时丢失对链表后续元素的访问通道。
不断滑动这几个指针直到 cur 变成 None,此时 pre 恰好停留在原链表的尾节点,也就是反转后新链表的头节点。
解题思路 (Python)
1 | # Definition for singly-linked list. |
复杂度分析
- 时间复杂度:O(N),其中 N 是链表中的节点总数。只需要遍历一次链表。
- 空间复杂度:O(1),只使用了常数个指针变量。