150:两数相加II

LeetCode 445 https://leetcode.cn/problems/add-two-numbers-ii/description/ 难度:中等 高频面试题汇总:https://www.yuweihung.com/posts/2025/lc-hot/ 反转链表+两数相加。 时间复杂度:O(n),其中 n 为 l1 长度和 l2 长度的最大值。 空间复杂度:O(1)。返回值不计入。 ...

七月 15, 2025 · Cassius

130:二叉树展开为链表

LeetCode 114 https://leetcode.cn/problems/flatten-binary-tree-to-linked-list/description/ 难度:中等 高频面试题汇总:https://www.yuweihung.com/posts/2025/lc-hot/ 采用头插法构建链表,按照右子树 - 左子树 - 根的顺序 DFS 这棵树。DFS 的同时,记录当前链表的头节点为 head。一开始 head 是空节点。 具体来说: 如果当前节点为空,返回。 递归右子树。 递归左子树。 把 root.left 置为空。 头插法,把 root 插在 head 的前面,也就是 root.right=head。 现在 root 是链表的头节点,把 head 更新为 root。 时间复杂度:O(n),其中 n 是二叉树的节点个数。 空间复杂度:O(n)。递归需要 O(n) 的栈空间。 ...

七月 15, 2025 · Cassius

129:排序奇升偶降链表

补充题 1 难度:中等 高频面试题汇总:https://www.yuweihung.com/posts/2025/lc-hot/ 给定一个奇数位升序,偶数位降序的链表,将其重新排序。 将链表拆分成两个链表:奇数节点链表和偶数节点链表。 奇数节点链表:位置 1,3,5,…的节点,原链表奇数位置升序,所以奇数节点链表是升序的。 偶数节点链表:位置 2,4,6,…的节点,原链表偶数位置降序,所以偶数节点链表是降序的。 将偶数节点链表反转,因为降序反转后变成升序。 合并两个升序链表(奇数链表和反转后的偶数链表),合并成新的升序链表。 时间复杂度:O(n)。 空间复杂度:O(1)。 ...

七月 15, 2025 · Cassius

116:旋转链表

LeetCode 61 https://leetcode.cn/problems/rotate-list/description/ 难度:中等 高频面试题汇总:https://www.yuweihung.com/posts/2025/lc-hot/ 本题是旋转链表,可以直接将链表闭合成环,再在指定位置断开。 时间复杂度:O(n),最坏情况下,我们需要遍历该链表两次。 空间复杂度:O(1),我们只需要常数的空间存储若干变量。 ...

七月 15, 2025 · Cassius

104:复制带随机指针的链表

LeetCode 138 https://leetcode.cn/problems/copy-list-with-random-pointer/description/ 难度:中等 高频面试题汇总:https://www.yuweihung.com/posts/2025/lc-hot/ 简单的做法是直接用一个哈希表把两个链表中节点的对应关系存起来,在二次遍历的时候设置新链表的 next 和 random。 此外,我们可以把新链表和旧链表混在一起。依次复制每个节点(创建新节点并复制 val 和 next),把新节点直接插到原节点的后面,形成一个交错链表。如此一来,原链表节点的下一个节点,就是其对应的新链表节点了! 然后遍历这个交错链表,假如节点 1 的 random 指向节点 3,那么就把节点 1′ 的 random 指向节点 3 的下一个节点 3′,这样就完成了对 random 指针的复制。 最后,从交错链表链表中分离出深拷贝后的链表。 时间复杂度:O(n),其中 n 是链表的长度。 空间复杂度:O(1)。返回值不计入。 ...

七月 13, 2025 · Cassius

108:LFU缓存

LeetCode 460 https://leetcode.cn/problems/lfu-cache/description/ 难度:困难 高频面试题汇总:https://www.yuweihung.com/posts/2025/lc-hot/ 本题是 LRU 缓存的升级版。本题对于每个使用频率,都需要维护一个双向链表,并通过哈希表把频率和链表关联起来。为了找到最少的使用频率,需要维护一个 min_freq 变量。 在插入时需要插入到链表的头部,而当容量满,需要删除时需要删除的是最少使用频率的书中的尾部结点 dummy->prev。 时间复杂度:所有操作均为 O(1)。 空间复杂度:O(min(p,capacity)),其中 p 为 put 的调用次数。 ...

七月 13, 2025 · Cassius

098:两两交换链表中的节点

LeetCode 24 https://leetcode.cn/problems/swap-nodes-in-pairs/description/ 难度:中等 高频面试题汇总:https://www.yuweihung.com/posts/2025/lc-hot/ K 个一组反转链表的简单版本。 时间复杂度:O(n),其中 n 为链表长度。 空间复杂度:O(1)。仅用到若干额外变量。 ...

七月 6, 2025 · Cassius

096:删除排序链表中的重复元素

LeetCode 83 https://leetcode.cn/problems/remove-duplicates-from-sorted-list/description/ 难度:简单 高频面试题汇总:https://www.yuweihung.com/posts/2025/lc-hot/ 判断下个节点,与当前节点相同就删除。 时间复杂度:O(n),其中 n 为链表的长度。 空间复杂度:O(1),仅用到若干额外变量。 ...

七月 6, 2025 · Cassius

079:回文链表

LeetCode 234 https://leetcode.cn/problems/palindrome-linked-list/description/ 难度:简单 高频面试题汇总:https://www.yuweihung.com/posts/2025/lc-hot/ 本题需要用到两个知识点,寻找链表的中间节点和反转链表。 首先找到链表的中间节点,然后反转链表的后半段。最后,同时遍历这两段链表,判断值是否相等。 时间复杂度:O(n),其中 n 是链表的长度(节点个数)。 空间复杂度:O(1)。 ...

七月 4, 2025 · Cassius

058:链表中倒数第 k 个节点

LCR 140 https://leetcode.cn/problems/lian-biao-zhong-dao-shu-di-kge-jie-dian-lcof/description/ 难度:简单 高频面试题汇总:https://www.yuweihung.com/posts/2025/lc-hot/ 前后指针找链表倒数第 k 个节点。 时间复杂度:O(n),其中 n 为链表的长度。我们使用快慢指针,只需要一次遍历即可,复杂度为 O(n)。 空间复杂度:O(1)。 ...

七月 3, 2025 · Cassius