牛客
文章平均质量分 50
额压力QL
这个作者很懒,什么都没留下…
展开
-
BM8 链表中倒数最后k个结点
描述输入一个长度为 n 的链表,设链表中的元素的值为 ai ,返回该链表中倒数第k个节点。如果该链表长度小于k,请返回一个长度为 0 的链表。要求:空间复杂度 O(n)O(n),时间复杂度 O(n)O(n)进阶:空间复杂度 O(1)O(1),时间复杂度 O(n)O(n)例如输入{1,2,3,4,5},2时,对应的链表结构如下图所示:其中蓝色部分为该链表的最后2个结点,所以返回倒数第2个结点(也即结点值为4的结点)即可,系统会打印后面所有的节点来比较。示例1输入:{1,2,3,4,5},原创 2022-05-10 16:42:09 · 123 阅读 · 1 评论 -
BM3 链表中的节点每k个一组翻转
描述将给出的链表中的节点每 k 个一组翻转,返回翻转后的链表如果链表中的节点数不是 k 的倍数,将最后剩下的节点保持原样你不能更改节点中的值,只能更改节点本身。示例1输入: {1,2,3,4,5},2返回值: {2,1,4,3,5}示例2输入: {},1返回值: {}思路:先反转一组(反转链表),然后使用递归反转剩下的。递归三段式:确定递归函数的参数和返回值确定终止条件确定单层递归的逻辑1、每次进入函数的头节点遍历链表k次,分出一组,若是后续不足K个节点,不用反转直原创 2022-05-02 12:18:33 · 140 阅读 · 0 评论 -
BM1 反转链表
描述给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。数据范围: 0≤n≤1000要求:空间复杂度 O(1)O(1) ,时间复杂度 O(n)O(n) 。如当输入链表{1,2,3}时,经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。以上转换过程如下图所示:示例1输入: {1,2,3}返回值: {3,2,1}示例2输入: {}返回值: {}说明: 空链表则输出空思路:一、迭代法原创 2022-04-29 11:03:34 · 143 阅读 · 0 评论 -
NC21 链表内指定区间反转
描述将一个节点数为 size 链表 m 位置到 n 位置之间的区间反转,要求时间复杂度 O(n)O(n),空间复杂度 O(1)O(1)。例如:给出的链表为 1\to 2 \to 3 \to 4 \to 5 \to NULL1→2→3→4→5→NULL, m=2,n=4m=2,n=4,返回 1\to 4\to 3\to 2\to 5\to NULL1→4→3→2→5→NULL.数据范围: 链表长度 0 < size \le 10000<size≤1000,0 < m \le n \原创 2022-04-28 19:25:26 · 119 阅读 · 0 评论 -
NC3 链表中环的入口结点
描述给一个长度为n链表,若其中包含环,请找出该链表的环的入口结点,否则,返回null。数据范围: n\le10000n≤10000,1<=结点值<=100001<=结点值<=10000要求:空间复杂度 O(1)O(1),时间复杂度 O(n)O(n)例如,输入{1,2},{3,4,5}时,对应的环形链表如下图所示:可以看到环的入口结点的结点值为3,所以返回结点值为3的结点。输入描述:输入分为2段,第一段是入环前的链表部分,第二段是链表环的部分,后台会根据第二段是否为空将原创 2022-04-27 19:51:58 · 113 阅读 · 0 评论 -
NC4 判断链表中是否有环
描述判断给定的链表中是否有环。如果有环则返回true,否则返回false。数据范围:链表长度 0 \le n \le 100000≤n≤10000,链表中任意节点的值满足 |val| <= 100000∣val∣<=100000要求:空间复杂度 O(1)O(1),时间复杂度 O(n)O(n)输入分为两部分,第一部分为链表,第二部分代表是否有环,然后将组成的head头结点传入到函数里面。-1代表无环,其它的数字代表有环,这些参数解释仅仅是为了方便读者自测调试。实际在编程时读入的是链表的头节原创 2022-04-26 20:09:22 · 68 阅读 · 0 评论 -
NC2 重排链表
描述思路一、暴力(循环遍历链表,第一个节点后接最后一个节点,第二个接点接倒数第二个节点,以此类推)具体:定义指针P指向头节点,每次找到链表的最后一个节点将其接在p所指节点的后面,p指向下一个节点, 直到p后面节点数小于两个。class Solution {public: void reorderList(ListNode *head) { if(head == NULL)return ; ListNode* p = head; whil原创 2022-04-25 19:59:38 · 404 阅读 · 0 评论 -
BM11 链表相加(二)
描述假设链表中每一个节点的值都在 0 - 9 之间,那么链表整体就可以代表一个整数。给定两个这种链表,请生成代表两个整数相加值的结果链表。数据范围:0 \le n,m \le 10000000≤n,m≤1000000,链表任意值 0 \le val \le 90≤val≤9要求:空间复杂度 O(n)O(n),时间复杂度 O(n)O(n)例如:链表 1 为 9->3->7,链表 2 为 6->3,最后生成新的结果链表为 1->0->0->0。示例1输入:原创 2022-04-24 20:28:59 · 72 阅读 · 0 评论 -
NC10 大数乘法
描述以字符串的形式读入两个数字,编写一个函数计算它们的乘积,以字符串形式返回。数据范围: 读入的数字大小满足 0 \le n \le 10^{1000}0≤n≤101000要求:空间复杂度 O(n)O(n),时间复杂度 O(n^2)O(n 2)示例1输入:“11”,“99”返回值:“1089”说明:11*99=1089示例2输入:“1”,“0”返回值:“0”思路两个数相乘积的长度最大为两个数的长度之和。所以首先定义一个存放结果的字符串。int len1 =原创 2022-04-23 21:03:26 · 94 阅读 · 0 评论 -
NC1 大数加法
描述以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回。数据范围:s.length,t.length \le 100000s.length,t.length≤100000,字符串仅由’0’~‘9’构成要求:时间复杂度 O(n)O(n)示例1输入:“1”,“99”返回值:“100”说明:1+99=100示例2输入:“114514”,“”返回值:“114514”思路:根据加法运算法则,对应位相加,不足位的补0例如:“1” 和“99” 先比较二者原创 2022-04-22 22:08:29 · 238 阅读 · 0 评论