链表
文章平均质量分 74
萘柰奈
为做出自己的游戏而努力喵
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
LeetCode刷题记录----146.LRU缓存(Medium)
本文介绍了LRU缓存算法的实现思路和具体代码实现。通过分析题目需求,确定需要快速查询和删除最久未使用元素两个核心功能。采用哈希表实现O(1)查询,双向链表实现O(1)删除和更新操作。文章详细阐述了初始化、get、put三个主要方法的实现逻辑,并配套实现了moveToTail、outNode、addToTail等辅助方法。强调在实现过程中应先规划好整体逻辑再处理细节的方法论,以及合理使用数据结构来满足不同操作的时间复杂度要求。最终的实现方案兼顾了查询效率和动态更新能力,为LRU缓存问题提供了标准解决方案。原创 2025-08-01 11:00:02 · 1175 阅读 · 0 评论 -
LeetCode刷题记录----23.合并K个升序链表(Hard)
本文探讨了合并K个有序链表的三种解法:1. 普通递归法:每次合并两个链表,时间复杂度为O(k^2n);2. 分治递归法:采用两两分组合并策略,时间复杂度优化至O(knlogk);3. 最小堆法:利用优先队列动态获取最小值节点,时间复杂度同样为O(knlogk)。文章详细分析了各方法的实现思路、时间空间复杂度比较,并提供了Python代码实现,重点强调了分治法和最小堆在优化递归效率方面的优势。原创 2025-07-31 20:54:39 · 1438 阅读 · 0 评论 -
LeetCode刷题记录----147. 对链表进行插入排序(medium)
文章摘要:本文介绍链表插入排序的实现方法。核心思路是通过tail指针分隔已排序和未排序部分,对于当前节点:若值大于等于tail则直接作为新tail;否则在已排序部分寻找合适插入位置。算法使用哑节点简化操作,时间复杂度O(n²),空间复杂度O(1)。关键点在于正确处理两种情况的边界条件,优先处理简单分支使逻辑更清晰。原创 2025-07-28 10:54:16 · 488 阅读 · 0 评论 -
LeetCode刷题记录----24.两两交换链表中的节点(medium)
本文介绍了链表相邻节点两两交换的两种解法。迭代法使用哑节点辅助,通过三指针(last、prev、cur)实现节点交换并维护连接关系,时间复杂度O(n),空间复杂度O(1)。递归法则将问题分解为:新头节点指向当前节点的下一节点,当前节点指向后续已交换链表,新头节点指回当前节点。两种方法都需注意头节点处理,迭代法建议使用哑节点简化操作,递归法要明确函数返回值是已交换完成的链表。时间复杂度均为O(n),递归空间复杂度为O(n)因递归栈开销。原创 2025-07-25 18:14:49 · 351 阅读 · 0 评论 -
LeetCode刷题记录----2.两数相加(medium)
本文提出两种链表数字相加的解决方案。初始方案通过比较链表长度后补零对齐,逐位相加处理进位,时间复杂度O(m+n),空间复杂度O(1)。优化方案直接新建链表存储结果,无需比较长度,通过同时遍历两个链表,处理不同长度及进位情况,最终时间复杂度O(max(m,n)),空间复杂度O(1)。关键点在于:1)使用//和%运算符分别处理进位和当前位值;2)循环结束后需检查剩余进位;3)返回结果不计入空间复杂度。优化方案更简洁高效,避免了不必要的预处理步骤。原创 2025-07-23 21:04:43 · 286 阅读 · 0 评论 -
LeetCode刷题记录----234.回文链表(easy)
摘要:本文探讨了判断链表是否为回文的多种方法。最直接的方式是将链表值存入数组后用双指针比对(时间复杂度O(N),空间复杂度O(N)),在Python中可利用切片特性快速比较。优化思路提出了反转链表后比较数字的方法,但存在大数溢出问题。更优解是使用快慢指针找到中点后反转后半部分链表进行比对(时间复杂度O(N),空间复杂度O(1))。最后介绍了递归解法,利用栈特性实现反向遍历。各种方法各有利弊,需根据具体场景选择。原创 2025-07-20 11:58:05 · 938 阅读 · 0 评论 -
LeetCode刷题记录----160.相交链表(easy)
本文探讨了如何寻找两个单链表的相交节点。主要提出三种解法:1)双指针对齐法:先计算两个链表的长度差,让长链表的指针与短链表对齐后同步移动;2)指针交换法:让两个指针遍历完一个链表后转向另一个链表开头,自然对齐;3)哈希表法:存储一个链表的节点再比对。前两种方法时间复杂度为O(M+N),空间复杂度O(1);哈希表法空间复杂度为O(M)。文章强调了对齐指针的重要性,并展示了两种巧妙的对齐实现方式。原创 2025-07-19 11:16:53 · 370 阅读 · 0 评论 -
LeetCode刷题记录----141.环形链表(easy)
本文探讨了检测链表是否存在环的三种方法。1.哈希表法:存储访问过的节点,遇到重复节点即判定有环,时间复杂度O(N),空间复杂度O(N)。2.快慢指针法:使用两个指针遍历链表,若相遇则存在环,时间复杂度O(N),空间复杂度O(1)。3.节点计数法:利用题目给定的节点数限制(最多10000个),当遍历次数超过该数值时判定有环,时间复杂度O(1),空间复杂度O(1)。文章分析了各方法的优缺点,并提供了Python实现代码,特别强调了快慢指针法的优化思路以及利用题目约束条件的取巧方法。原创 2025-07-21 10:16:22 · 442 阅读 · 0 评论 -
LeetCode刷题记录----142.环形链表(medium)
本文探讨了检测链表中环入口节点的两种方法。第一种哈希表法通过记录访问过的节点,当首次遇到重复节点时即为环入口,时间复杂度O(N),空间复杂度O(N)。第二种快慢指针法通过数学推导发现:从头节点到环入口的距离等于相遇点到环入口的距离。该方法无需额外空间(O(1)),且保持链表结构完整。最终推荐使用快慢指针法,它既能判断环的存在性,又能在不修改链表的情况下精确定位环入口节点。原创 2025-07-22 22:00:11 · 1065 阅读 · 0 评论 -
LeetCode刷题记录----206.反转链表(easy)
本文介绍了反转链表的两种方法:迭代法和递归法。迭代法使用双指针技术,时间复杂度O(n),空间复杂度O(1);递归法则通过分解问题,时间复杂度O(n),空间复杂度O(n)。两种方法各有特点:迭代法空间效率高,递归法代码简洁但需要更多空间。文章通过具体代码展示了两种实现方式,并分析了各自的优缺点,为处理链表反转问题提供了实用参考。原创 2025-07-19 12:24:30 · 475 阅读 · 0 评论 -
LeetCode刷题记录----19.删除链表的倒数第 N 个结点(medium)
本文探讨了删除链表倒数第n个节点的三种解法:1)递归法:通过递归回溯时计数,当n=0时删除下一节点,时间复杂度O(N),空间复杂度O(N);2)栈方法:使用栈保存节点后弹出n个节点删除,更直观但仍需O(N)空间;3)双指针法:快指针先走n步,然后与慢指针同步移动,快指针到末尾时慢指针正好位于待删节点前驱,最优解为O(N)时间与O(1)空间。文章总结了链表问题的常用解法思路,包括递归转栈优化、快慢指针等技巧,并指出倒数第n个节点的本质是与末尾节点的距离关系。原创 2025-07-24 22:27:42 · 1077 阅读 · 0 评论
分享