LeetCode | 反转链表

285 字
1 分钟
LeetCode | 反转链表

分类:链表

题目#

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

讲解#

反转链表的核心操作是让每个节点的 next 指向前一个节点。用 prev 记录前一个节点,curr 记录当前节点。

每一步:

  1. 先保存 curr.nextnxt(不然改了 curr.next 就找不到下一个了)。
  2. curr.next = prev,完成当前节点的反转。
  3. prevcurr 各往前移一步。

循环结束时 curr 为空,prev 就是新的头节点。

复杂度#

  • 迭代法:
    • 时间复杂度:O(n)
    • 空间复杂度:O(1)

代码#

源码#

from typing import Optional
class ListNode:
def __init__(self, val: int = 0, next: Optional['ListNode'] = None):
self.val = val
self.next = next
class Solution:
def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
prev = None
curr = head
while curr:
nxt = curr.next
curr.next = prev
prev = curr
curr = nxt
return prev

测试#

def build_list(vals):
dummy = ListNode()
cur = dummy
for v in vals:
cur.next = ListNode(v)
cur = cur.next
return dummy.next
def to_list(head):
res = []
while head:
res.append(head.val)
head = head.next
return res
sol = Solution()
assert to_list(sol.reverseList(build_list([1, 2, 3, 4, 5]))) == [5, 4, 3, 2, 1]
assert to_list(sol.reverseList(build_list([1, 2]))) == [2, 1]
assert to_list(sol.reverseList(build_list([]))) == []
assert to_list(sol.reverseList(build_list([1]))) == [1]
print("PASS")

参考资料#

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

LeetCode | 反转链表
https://leetcode.cn/problems/reverse-linked-list/
作者
平昊阳
发布于
2026-08-12
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
平昊阳
乘长风,破巨浪, 展鸿图于未央!
--
总访问量
--
访客数
公告
欢迎来到我的个人博客!欢迎关注交流吖!
更多相关公告,见
社交-留言」。
音乐
封面

音乐

暂未播放

0:000:00
暂无歌词
站点统计
文章
66
分类
16
标签
93
总字数
477,284
运行时长
0
最后活动
0 天前

文章目录