链表
豌豆射手GCC
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
链表 328. 奇偶链表
328. 奇偶链表 给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。 请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。 示例 1: 输入: 1->2->3->4->5->NULL 输出: 1->3->5->2->4->NULL 示例 2: 输入: 2->1->3->5-&g原创 2020-06-19 13:48:09 · 255 阅读 · 0 评论 -
链表 237. 删除链表中的节点
237. 删除链表中的节点 请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。 现有一个链表 – head = [4,5,1,9],它可以表示为: 示例 1: 输入: head = [4,5,1,9], node = 5 输出: [4,1,9] 解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9. 示例 2: 输入: head = [4,5,1,9], node = 1 输出: [4,5,9] 解原创 2020-06-03 13:35:21 · 124 阅读 · 0 评论 -
递归实现 206. 反转链表
206. 反转链表 反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 进阶: 你可以迭代或递归地反转链表。你能否用两种方法解决这道题? 递归解法 递归函数功能为调转以head开头的链表; 则想象,当head->next后面都被倒转后需要做什么; (1)head->next->next=head; 指向自己 (2)head->next=null; 自己指原创 2020-05-29 10:06:39 · 180 阅读 · 0 评论 -
链表遍历+链表长度 160. 相交链表
160. 相交链表 编写一个程序,找到两个单链表相交的起始节点。 如下面的两个链表: 在节点 c1 开始相交。 示例 1: 输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3 输出:Reference of the node with value = 8 输入解释:相交节点的值为 8 (注意,如果两个链表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表原创 2020-05-25 11:24:01 · 189 阅读 · 0 评论 -
链表+归并排序+非递归 148. 排序链表
148. 排序链表 在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。 示例 1: 输入: 4->2->1->3 输出: 1->2->3->4 示例 2: 输入: -1->5->3->4->0 输出: -1->0->3->4->5 解题 复杂度nlogn即为归并排序; 递归方法 分为merge和mergesort两步; (1)merge dummyhead维护归并后的链表,并返回; (2)merg原创 2020-05-24 17:00:00 · 467 阅读 · 0 评论 -
链表排序 147. 对链表进行插入排序
对链表进行插入排序。 插入排序的动画演示如上。从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示)。 每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将其插入到已排好序的链表中。 147. 对链表进行插入排序 插入排序算法: 插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。 每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。 重复直到所有输入数据插入完为止。 示例 1: 输入: 4->2->1->3原创 2020-05-24 16:33:54 · 186 阅读 · 0 评论 -
双向链表List+哈希储存迭代器 146. LRU缓存机制
146. LRU缓存机制 运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。 获取数据 get(key) - 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。 写入数据 put(key, value) - 如果密钥已经存在,则变更其数据值;如果密钥不存在,则插入该组「密钥/数据值」。当缓存容量达到上限时,它应该在写入新数据之前删除最久未使用的数据值,从而为新的数据值留出空间。 进阶:原创 2020-05-24 15:14:46 · 222 阅读 · 0 评论 -
链表遍历+取尾部+快慢指针 143. 重排链表
143. 重排链表 给定一个单链表 L:L0→L1→…→Ln-1→Ln , 将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→… 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例 1: 给定链表 1->2->3->4, 重新排列为 1->4->2->3. 示例 2: 给定链表 1->2->3->4->5, 重新排列为 1->5->2->4->3. 解题1:每次取尾部,插入前面 挨个ne原创 2020-05-23 16:48:48 · 351 阅读 · 0 评论 -
类似morris算法 改变二叉树的构造 114. 二叉树展开为链表
114. 二叉树展开为链表 给定一个二叉树,原地将它展开为一个单链表。 例如,给定二叉树 1 / \ 2 5 / \ \ 3 4 6 将其展开为: 1 \ 2 \ 3 \ 4 \ 5 \ 6 解题 类似莫里斯算法,将从根节点开始的左子树接到右子树上,将原本右子树的节点接到新接节点的最右侧,然后将左子树为null,继续检查右子树; /** * Definiti原创 2020-05-18 15:28:02 · 210 阅读 · 0 评论 -
递归+链表+填空树 108. 将有序数组转换为二叉搜索树 109. 有序链表转换二叉搜索树
108. 将有序数组转换为二叉搜索树 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。 示例: 给定有序数组: [-10,-3,0,5,9], 一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 9 / / -10 5 解题 递归求解,每次找中间的点作为根节点; 解法1: 每次取中间右边的点原创 2020-05-18 13:46:38 · 150 阅读 · 0 评论 -
链表+分类+跳过+合并 86. 分隔链表 92. 反转链表 II
86. 分隔链表 给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。 你应当保留两个分区中每个节点的初始相对位置。 示例: 输入: head = 1->4->3->2->5->2, x = 3 输出: 1->2->2->4->3->5 解题 (1)新建表头节点dummyhead; (2)遇到比x小的加入节点,遇到比x大的放在原位,跳过比x小的,最后合并即可; /** * Definition原创 2020-05-13 11:44:47 · 149 阅读 · 0 评论 -
三指针遍历链表 82. 删除排序链表中的重复元素 II 83. 删除排序链表中的重复元素
82. 删除排序链表中的重复元素 II 给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。 示例 1: 输入: 1->2->3->3->4->4->5 输出: 1->2->5 示例 2: 输入: 1->1->1->2->3 输出: 2->3 字典+两次遍历(未用到已排序的条件) 第一次遍历得到重复的元素有哪些,第二次遍历把重复元素跳过即可; /** * Definition for sin原创 2020-05-13 10:52:55 · 230 阅读 · 0 评论 -
链表交换+递归+迭代 24. 两两交换链表中的节点 25. K 个一组翻转链表
24. 两两交换链表中的节点 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例: 给定 1->2->3->4, 你应该返回 2->1->4->3. 解题 递归解法 设定first节点和second节点,若传入节点为空或下一个为空,则停止交换; 若两者都不为空,则前一个节点的next...原创 2020-05-01 16:53:35 · 217 阅读 · 0 评论 -
链表结构+vector+reverse函数 1074 Reversing Linked List (25分)
1074 Reversing Linked List (25分) Given a constant K and a singly linked list L, you are supposed to reverse the links of every K elements on L. For example, given L being 1→2→3→4→5→6, if K=3, then you...原创 2020-04-20 23:40:04 · 222 阅读 · 0 评论 -
哈夫曼树 与 哈夫曼编码 (由最小堆构建)复习
哈夫曼树 每个结点的权值乘以与根结点的路径长度之和最小的树——最优二叉树 哈夫曼树的特点: 没有度为1的结点; 哈夫曼树的任意非叶节点的左右子树交换后仍是哈夫曼树; n个叶子结点的哈夫曼树共有2n-1个结点; 对同一组权值{w1 ,w2, …… , wn},存在不同构的哈夫曼树 哈夫曼树的构成 将二叉树按结点权值大小转化成最小堆,每次取堆定两个元素组成新的二叉树结点,插回堆中; 当...原创 2020-04-13 01:02:28 · 640 阅读 · 0 评论 -
C 图的链表表示 和 邻接矩阵表示
图的链表表示 单源无权最短路径——BFS 可以考虑用链表表示——更节省内存空间; #define MaxVertexNum 100 /* 最大顶点数设为100 */ typedef int Vertex; /* 用顶点下标表示顶点,为整型 */ typedef int WeightType; /* 边的权值设为整型 */ typedef char DataTyp...原创 2020-04-10 23:45:11 · 382 阅读 · 0 评论 -
C 图的构建 简单的BFS和DFS 06-图1 列出连通集 (25分)
给定一个有N个顶点和E条边的无向图,请用DFS和BFS分别列出其所有的连通集。假设顶点从0到N−1编号。进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的顺序访问邻接点。 输入格式: 输入第1行给出2个整数N(0<N≤10)和E,分别是图的顶点数和边数。随后E行,每行给出一条边的两个端点。每行中的数字之间用1空格分隔。 输出格式: 按照格式,每行输出一个连通集。先输出DFS的结果,再...原创 2020-04-09 01:16:31 · 1065 阅读 · 0 评论 -
C 链表 02-线性结构2 一元多项式的乘法与加法运算 (20分)
02-线性结构2 一元多项式的乘法与加法运算 (20分) 设计函数分别求两个一元多项式的乘积与和。 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。 输出格式: 输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输...原创 2020-04-03 14:05:21 · 411 阅读 · 0 评论
分享