目录:
目的
思路
复杂度
记忆秘诀
python代码
目的
1 -> 2 -> 3 -> 4 -> 5
反转成5 -> 4 -> 3 -> 2 -> 1
思路
这个任务主要是把单链表的方向完全反过来,可以想象成一辆车(
prev
)开到终点(cur = None
),每次接上当前人(cur
),并让下家(next_node
)接替继续。只需要记住三步:记住下家、转身上车、继续向前。
准备阶段:
- 你有一排人,站成一队(链表)。
- 一辆空车停在第一个人前面(
prev = None
),初始状态是None
,还没接到任何人。 - 一开队伍的第一个人是(
cur = head
), 指向链表头head
,逐步走到终点。
开始倒车接人:
① 记住下家:
当前人转身之前,你得记住他后面是谁(next_node = cur.next
)。
这样即使当前人上了车,队伍还不会断!② 转身上车:
当前人cur
转身,指向prev
(车里的人)(cur.next = prev
)。
这个动作让方向反过来了!③继续向前:
车往前开,把当前人装上车(prev = cur
),当前人变成下一位行人,继续向前走(cur = next_node
)。
车继续接人,直到所有人上车!
结束:所有人上车
- 当你接完最后一个人(
cur = None
),整个队伍已经掉头成功。 - 返回这辆车,任务完成!
复杂度
- 时间:每人过一遍,O(n)。
- 空间:指针只占固定内存,O(1)。
记忆秘诀
- 记住下家:保存当前节点的下一个人,别让队伍断。
- 转身上车:让当前节点转身,看向车后面的一个人。
- 继续向前:车往前走,当前人往下走。
python代码
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param head ListNode类
# @return ListNode类
#
class Solution:def ReverseList(self , head: ListNode) -> ListNode:# write code here# 初始化两个指针,prev 指向 None,cur 指向头节点if not head:return Noneprev = Nonecur = head# 循环处理每个节点,直到当前节点为空while cur:# 保存当前节点的下一个节点,避免断开后丢失next_node = cur.next# 当前节点的指向反转,指向前一个节点cur.next = prev# 将 prev 和 cur 前移,继续处理下一个节点prev = curcur = next_node# 返回反转后的链表头return prev
* 欢迎大家探讨新思路,能够更好的理解和记忆