刷题
文章平均质量分 70
刷题。
Hoshino373
这个作者很懒,什么都没留下…
展开
-
复制带随机指针的链表(C语言)
【题目描述】给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。构造这个链表的深拷贝。 深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。复制链表中的指针都不应指向原链表中的节点 。例如,如果原链表中有 X 和 Y 两个节点,其中 X.random --> Y原创 2022-02-21 13:04:53 · 496 阅读 · 0 评论 -
对链表进行插入排序(C语言)
【题目描述】给定单个链表的头 head ,使用插入排序对链表进行排序,并返回排序后链表的头 。插入排序算法的步骤:1.插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。2.每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。3.重复直到所有输入数据插入完为止。题目来源(力扣):对链表进行插入排序示例1:输入: head = [4,2,1,3]输出: [1,2,3,4]示例2输入: head = [-1,5,3,原创 2022-02-22 22:18:33 · 5896 阅读 · 2 评论 -
回文链表(C语言)
给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。原创 2022-02-06 19:55:05 · 1531 阅读 · 0 评论 -
链表分割(C语言)
给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。原创 2022-01-30 14:04:41 · 1804 阅读 · 0 评论 -
相交链表(C语言)
【题目描述】给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。题目及图片来源(力扣):相交链表注:题目数据保证整个链式结构中不存在环。函数返回结果后,链表必须保持其原始结构 。【基本思路】先看比较特殊的情况,两个链表相交且长度相等(比如示例1的图去掉B左边的第一个节点)。这时只要双指针同时从各自的链表头开始向后走,等到两指针相等时便是相交的起始节点。再看比较一般的情况,两个链表相交但长度不等(如示原创 2022-02-12 19:23:30 · 682 阅读 · 0 评论 -
设计循环队列(C语言)
【题目描述】设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。Your MyCircularQueue struct will be instantiated and called as such:My原创 2022-02-24 22:20:19 · 1018 阅读 · 6 评论 -
合并两个有序链表(C语言)
【题目描述】将两个升序链表(l1 和 l2 均按非递减顺序排列)合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。题目来源(力扣):合并两个有序链表示例1:输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]示例2:输入:l1 = [ ], l2 = [ ]输出:[ ]示例3:输入:l1 = [ ], l2 = [0]输出:[0]文章目录无哨兵位的迭代解法有哨兵位的迭代解法无哨兵位的迭代解法【基本思路】原创 2022-01-23 16:53:17 · 7431 阅读 · 22 评论 -
环形链表专题(C语言)
文章目录初阶版进阶版初阶版【题目描述】给你一个链表的头节点 head ,判断链表中是否有环。如果链表中存在环 ,则返回 true 。 否则,返回 false 。注:环指的是链表尾连接到链表中形成的结构。题目来源(力扣):环形链表【基本思路】快慢指针法:慢指针一次走一步,快指针一次走两步。若存在环,则快慢指针一直在环里循环直到相遇为止(由于慢指针一次走一步,快指针一次走两步,故必能相遇)。若不存在环,则快指针先到达链表末尾。【代码实现】bool hasCycle(struct Li原创 2022-02-14 08:44:50 · 802 阅读 · 3 评论 -
删除排序链表中的重复元素(C语言)
删除排序链表中的重复元素(C语言)原创 2022-02-20 10:53:08 · 4477 阅读 · 6 评论 -
采用快慢指针法来解决有关数组的问题(C语言)
文章目录题目一题目二题目一题目来源(力扣):移除元素题目描述:给你一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并原地修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例:输入:nums = [3,2,2,3], val = 3输出:2, nums = [2,2]这道题是移除指定值的元素。【基本思路】先将 slow 和 fast 都初原创 2021-12-11 16:55:47 · 755 阅读 · 0 评论 -
调整数组顺序使奇数位于偶数前面(C语言)
调整数组顺序使奇数位于偶数前面(C语言)原创 2021-10-30 11:16:02 · 1883 阅读 · 0 评论 -
异或的妙用(C语言)
异或的妙用(C语言)原创 2021-12-05 11:07:33 · 1220 阅读 · 1 评论 -
阶乘后的零(C语言)
题目:给定一个整数 n ,返回 n! 结果中尾随零的数量。原创 2021-11-06 16:30:56 · 1041 阅读 · 0 评论 -
移除链表中等于给定值的所有节点(C语言)
题目描述:给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回新的头节点 。题目来源(力扣):移除链表元素示例1:输入:head = [1,2,6,3,4,5,6], val = 6输出:[1,2,3,4,5]示例2:输入:head = [ ], val = 1输出:[ ]示例3:输入:head = [7,7,7,7], val = 7输出:[ ]首先明确整个题的循环条件赋值 -> 下一个.原创 2021-12-25 16:20:28 · 866 阅读 · 0 评论 -
链表中倒数第k个节点(C语言)
题目描述:输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。(例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1、2、3、4、5、6。这个链表的倒数第 3 个节点是值为 4 的节点。)示例:给定一个链表: 1->2->3->4->5, 和 k = 2.返回链表 4->5.题目来源(力扣):链表中倒数第k个节点文章目录单指针法快慢指针法单指针法基本思路:先遍历一遍,记录链表.原创 2022-01-17 08:45:50 · 1521 阅读 · 0 评论 -
合并两个有序数组(C语言)
合并两个有序数组【题目】如果不考虑时间复杂度,那么最直接最暴力的方法是先将 nums2 数组拷到 nums1 数组的后面,然后再用一个简单的排序算法,就能解决问题了。但是在时间复杂度上几乎没有优势。其实,当我们仔细再想一想,为什么给的两个数组都是有序的?直接给你两个无序数组用上面的方法不也可以解决问题吗?因此,如果想减小时间复杂度的话,就要特别关注给的“有序数组”这个条件,在这基础上想出另一种更优的解法。我们想啊,两个数组不是都有序吗?那就先 malloc 一个用指针 tmp 指向的数组作辅助,每原创 2021-11-21 11:47:39 · 15614 阅读 · 8 评论 -
大数相加(C语言)
文章目录数组 + 整数解法一解法二数组 + 数组字符串 + 字符串【引入】在现实中,当对两个超级大的整数进行加法运算的时候,这两个超级大的数以及它们的结果都是没办法用变量存起来的。但是我们可以用数组或者字符串去存储,然后在这基础上进行运算。数组 + 整数【题目描述】对于非负整数 X 而言,X 的数组形式是每位数字按从左到右的顺序形成的数组。例如,如果 X = 1231,那么其数组形式为 [1,2,3,1]。给定非负整数 X 的数组形式 A,返回整数 X+K 的数组形式。题目来源(力扣):数原创 2021-11-27 22:07:42 · 4139 阅读 · 0 评论 -
轮转数组(C语言)
题目来源(力扣):轮转数组更多文章异或的妙用(C语言)大数相加(C语言)合并两个有序数组(C语言)阶乘后的零(C语言)调整数组顺序使奇数位于偶数前面(C语言)原创 2021-12-18 17:24:13 · 1641 阅读 · 0 评论 -
链表的中间结点(C语言)
文章目录单指针法快慢指针法题目来源(力扣):链表的中间结点题目描述:给定一个头结点为 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。示例1:输入:[1,2,3,4,5]输出:此列表中的结点 3 。示例 2:输入:[1,2,3,4,5,6]输出:此列表中的结点 4 。单指针法基本思路:先遍历一遍,算出链表结点的总个数。再遍历一遍,找出中间结点。该解法思路不难,一般能想到。struct ListNode* middleNod原创 2022-01-07 17:12:38 · 999 阅读 · 0 评论 -
反转链表(C语言)
题目描述:给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。示例1:输入:head = [1,2,3,4,5]输出:[5,4,3,2,1]示例2:输入:head = []输出:[]题目来源(力扣):反转链表原创 2022-01-06 08:32:06 · 4519 阅读 · 4 评论