反转链表
文章平均质量分 69
flashlight_hi
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
LeetCode 分类刷题:234. 回文链表
判断链表是否为回文有两种方法。第一种是用数组存储节点值,比较数组前后半段是否对称(时间复杂度O(n),空间复杂度O(n))。第二种更优解法:1)使用快慢指针找到中间节点;2)反转后半段链表;3)同时遍历原链表前半段和反转后的后半段进行值比较(时间复杂度O(n),空间复杂度O(1))。若需保持原链表不变,可在比较后将后半段再次反转恢复。两种方法都能有效判断回文链表,第二种方法在空间效率上更优。原创 2025-11-11 11:48:39 · 507 阅读 · 0 评论 -
LeetCode 分类刷题:2816. 翻倍以链表形式表示的数字
摘要:题目要求将代表非负整数的链表翻倍。作者解法通过反转链表、逐位计算并处理进位,最后再次反转得到结果,时间复杂度O(n),空间复杂度O(1)。灵神的优化方案更简洁:1)若头节点值大于4则先在前面补0;2)遍历时若下一节点大于4则提前+1进位。该方法同样保持O(n)时间和O(1)空间复杂度,但减少了操作次数。两种解法都高效完成了链表数字翻倍的任务,后者通过预判进位优化了计算过程。原创 2025-11-10 20:08:57 · 613 阅读 · 0 评论 -
LeetCode 分类刷题:445. 两数相加 II
该题解通过反转链表实现高位在前的两数相加。先将两个链表反转,从低位开始逐位相加并处理进位,最后再将结果链表反转恢复高位顺序。使用哨兵节点简化操作,时间复杂度O(n),空间复杂度O(1)。核心步骤包括:反转链表、按位相加处理进位、再次反转结果链表。原创 2025-10-31 17:52:06 · 415 阅读 · 0 评论 -
LeetCode 分类刷题:2. 两数相加
题目要求将两个逆序存储数字的链表相加,返回同样逆序的链表。解法思路是逐位相加并处理进位值。提供了两种解法:第一种分别处理两个链表的每一位和进位;第二种(灵神解法)使用哨兵节点,统一处理链表节点和进位。两种方法的时间复杂度都是O(n),空间复杂度O(1)。原创 2025-10-29 22:04:12 · 309 阅读 · 0 评论 -
LeetCode 分类刷题:24. 两两交换链表中的节点
本文介绍了两种解决链表节点两两交换问题的方法。解法1采用k个一组翻转链表(k=2)的思路,通过预处理计算链表长度,使用迭代法进行分组翻转。解法2采用更简洁的直接交换相邻节点法,通过维护前驱指针实现原地交换。两种方法均满足题目要求的O(n)时间复杂度和O(1)空间复杂度,适用于空链表或单节点链表等边界情况。关键点在于正确处理节点指针的重新链接,同时保持链表剩余部分的连接关系。原创 2025-10-29 16:41:59 · 162 阅读 · 0 评论 -
LeetCode 分类刷题:25. K 个一组翻转链表
该题目要求每k个节点一组翻转链表,不足k个的保持原序。解法首先统计链表长度n,然后进行n/k次翻转操作。每次翻转k个节点时保存原头节点,翻转后调整指针指向,将上一段的尾节点连接新翻转的头节点,原头节点(现尾节点)连接下一段头节点。时间复杂度O(n),空间复杂度O(1)。关键点在于正确处理节点间的指针关系,确保翻转后的链表正确连接。原创 2025-10-12 16:08:50 · 211 阅读 · 0 评论 -
LeetCode 分类刷题:92. 反转链表 II
该问题要求反转链表从位置left到right的节点。关键点在于正确处理链表节点的引用关系。通过创建虚拟头节点dummy,并使用双指针法进行局部反转:先定位到left前驱节点p0,然后反转left到right区间内的节点,最后重新连接反转后的子链表。解法时间复杂度O(right),空间复杂度O(1)。需注意Python中链式赋值与独立赋值的区别,前者使变量共享同一对象引用,后者创建独立对象。原创 2025-10-12 10:29:51 · 598 阅读 · 0 评论 -
LeetCode 分类刷题:206. 反转链表
本文介绍如何通过头插法反转单链表。算法使用三个指针(pre, cur, nxt)遍历原链表,将当前节点cur插入到新链表pre的头部,nxt记录下一个未反转的节点。最终cur指向空,返回pre即反转后的链表。该方法时间复杂度O(n),空间复杂度O(1)。原创 2025-10-10 11:39:30 · 275 阅读 · 0 评论
分享