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

提示
一句话思路:遍历链表,逐个把当前节点的 next 指向前一个节点,同时用临时变量保存后继节点。
- 需要三个指针:
cur当前节点、pre已反转部分的新头(当前节点的前一个)、tmp暂存后继节点。 - 关键步骤顺序:先
tmp保存cur.next(不然改了 next 就找不到后面了),再让cur.next指向pre,然后pre、cur各自前进。 - 循环结束后
pre就是原链表的尾节点,即反转后的新头。 - 一次遍历 O(n),空间 O(1)。
答案
python
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
cur, pre = head, None # cur 当前节点,pre 已反转部分的新头(初始为 None)
while cur: # 当前节点不为空就继续
tmp = cur.next # 暂存后继节点 cur.next,避免丢失
cur.next = pre # 修改 next 引用指向,指向已反转部分
pre = cur # pre 前进到当前节点(成为新的已反转头)
cur = tmp # cur 访问下一节点
return pre # 循环结束,pre 即反转后的链表头
留言板