音乐
音乐
暂未播放
0:00/0:00
暂无歌词
LeetCode | 反转链表
285 字
1 分钟
LeetCode | 反转链表
分类:链表
题目#
给你单链表的头节点 head,请你反转链表,并返回反转后的链表。
讲解#
反转链表的核心操作是让每个节点的 next 指向前一个节点。用 prev 记录前一个节点,curr 记录当前节点。
每一步:
- 先保存
curr.next到nxt(不然改了curr.next就找不到下一个了)。 curr.next = prev,完成当前节点的反转。prev和curr各往前移一步。
循环结束时 curr 为空,prev 就是新的头节点。
复杂度#
- 迭代法:
- 时间复杂度:
O(n) - 空间复杂度:
O(1)
- 时间复杂度:
代码#
源码#
1from typing import Optional2
3
4class ListNode:5 def __init__(self, val: int = 0, next: Optional['ListNode'] = None):6 self.val = val7 self.next = next8
9
10class Solution:11 def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:12 prev = None13 curr = head14
15 while curr:16 nxt = curr.next17 curr.next = prev18 prev = curr19 curr = nxt20
21 return prev测试#
1def build_list(vals):2 dummy = ListNode()3 cur = dummy4 for v in vals:5 cur.next = ListNode(v)6 cur = cur.next7 return dummy.next8
9
10def to_list(head):11 res = []12 while head:13 res.append(head.val)14 head = head.next15 return res16
17
18sol = Solution()19
20assert to_list(sol.reverseList(build_list([1, 2, 3, 4, 5]))) == [5, 4, 3, 2, 1]21assert to_list(sol.reverseList(build_list([1, 2]))) == [2, 1]22assert to_list(sol.reverseList(build_list([]))) == []23assert to_list(sol.reverseList(build_list([1]))) == [1]24
25print("PASS")参考资料#
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
LeetCode | 反转链表
https://leetcode.cn/problems/reverse-linked-list/最后更新于 2026-08-12
部分内容可能已过时
相关文章智能推荐
1
LeetCode | 合并两个有序链表
LeetCodeLeetCode 合并两个有序链表题解:双指针遍历比较节点值,dummy 虚拟头节点串联结果链表。
2
LeetCode | 相交链表
LeetCodeLeetCode 相交链表题解:使用哈希集合或长度差对齐法找到两个链表的相交起始节点。
3
LeetCode | 两数相加
LeetCodeLeetCode 两数相加题解:模拟竖式逐位相加,dummy 虚拟头节点串联结果链表,维护 carry 进位。
4
LeetCode | 哈希表
LeetCode整理 LeetCode 哈希表题目的核心思路:先建表,再查表。
5
LeetCode | 移动零
LeetCodeLeetCode 移动零题解:使用双指针原地移动零,同时保持非零元素相对顺序。
随机文章随机推荐
暂无随机文章
评论区
分享你的想法,与大家交流讨论
--
总访问量
--
访客数
公告
音乐
音乐
暂未播放
0:00/0:00
暂无歌词
站点统计
文章
66
分类
16
标签
93
总字数
477,284
运行时长
0 天
最后活动
0 天前
最新动态



