7 篇
常见数据结构专区
题目描述 给你一个长度为 n 的链表,每个节点除了 next 指针之外,还有一个额外的 random 指针。这个指针可以指向链表中的任意节点,也可以是 nil。 现在需要构造这个链表的深拷贝。新链表中的每个节点都要重新创建,节点值与原节点一致,同时 next 和 random 的指向关系也要和原链表保持一致,并且不能再
题目描述 设计一个满足 LRU (最近最少使用) 约束的缓存结构。 它需要支持两类操作: get(key):如果 key 存在,返回对应的 value,否则返回 -1 put(key, value):如果 key 已存在,就更新它的值;如果不存在,就插入一组新的键值对;当容量超出限制时,要删除最近最少使用的那个 ke
题目描述 给你一个链表的头节点 head,要求删除链表的倒数第 n 个节点,并返回删除后的链表头节点。 这道题的关键不在于找到节点的值,而在于真正把目标节点从链表里摘掉,所以最后需要调整前后节点的指针连接关系。 思路 这份代码使用的是链表里很经典的双指针做法。先创建一个哑节点 dummy 指向原链表头部,这样即使要删除
题目描述 给你两个按升序排列的链表 list1 和 list2,要求把它们合并成一个新的升序链表并返回。 这里的“合并”不是重新创建所有节点,而是把两个链表中原有的节点按顺序接起来,最终得到一条有序的新链表。 思路 这份代码使用了一个很常见的链表技巧:先创建一个哑节点 dummy,再用 cur 指针始终指向新链表的尾部
题目描述 给你一个链表头节点 head,要求每 k 个节点作为一组进行翻转,并返回处理后的新链表。 如果链表最后剩下的节点数量不足 k 个,那么这一段保持原来的顺序不动。题目还特别要求,不能只交换节点里的值,而是要真正调整链表节点之间的连接关系。 思路 这份代码依然先用了链表题里很常见的哑节点 dummy。不过这里的
题目描述 给你一个已经按升序排好的链表 head,要求把所有出现过重复的数字对应节点全部删除,只保留那些只出现一次的节点。 最后返回的链表仍然需要保持有序,所以关键在于识别“某个值是否重复出现”,并把这一整段重复值全部跳过去,而不是只删除其中一个节点。 思路 这份代码先创建了一个哑节点 dummy,让它指向原链表头部,
题目描述 给你一个单链表的头节点 head,以及两个整数 left 和 right,其中 left <= right。 要求只反转链表中第 left 个位置到第 right 个位置之间的节点,其他部分保持原有顺序,最后返回新的链表头节点。 思路 这份代码先创建了一个哑节点 dummy,并让它指向原链表头部。这样做的好处