数据结构OJ
文章平均质量分 70
数据结构相关OJ题目
Epiphanywh
如果想征服生命中的焦虑,活在当下,活在每一个呼吸里。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
链表中倒数第k个结点 题解
本次内容到此结束了!输入一个链表,输出该链表中倒数第k个结点。原创 2023-08-11 07:59:15 · 133 阅读 · 1 评论 -
138. 复制带随机指针的链表(深拷贝)题解
在这一步中,我们会遍历原链表,并为每个节点创建一个新的节点,然后将新节点插入到原节点之后-->插入时可以采用先用新节点的next指向current的next,在用current的next指向新节点,最后再将current移动到新节点的next;如果原节点的随机指针不为空,那么新节点的随机指针应该指向原节点随机指针指向的新节点(原节点的下一个节点);指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。节点组成,其中每个新节点的值都设为其对应的原节点的值。原创 2023-08-11 07:58:16 · 148 阅读 · 0 评论 -
160. 相交链表 题解
注:本题中链表相交是“Y”型的,而不是“X”型的,因为本题是单链表,每一个节点中只有一个指针域,也就意味着一个节点只能指向一个节点。本次内容到此结束了!,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回。给你两个单链表的头节点。原创 2023-08-11 07:58:29 · 150 阅读 · 0 评论 -
合并两个有序链表 题解
本次内容到此结束了!注:这里尾插的的时候可以不进行创建新的节点,可以直接用原链表的节点进行连接即可。新链表是通过拼接给定的两个链表的所有节点组成的。如果current1的数值小于或等于current2。如果current1的数值大于current2。显然这种方法更好,但其思路是一模一样的。如果current1指向NULL。如果current2指向NULL。将两个升序链表合并为一个新的。原创 2023-08-11 07:59:04 · 145 阅读 · 1 评论 -
CM11 链表分割 题解
给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。本次内容到此结束了!注:这里尾插的的时候可以不进行创建新的节点,可以直接用原链表的节点进行连接即可。显然这种方法更好,但其思路是一模一样的。现有一链表的头指针 ListNode*如果current节点的值大于、等于x。如果current节点的值小于x。原创 2023-08-11 07:58:44 · 133 阅读 · 0 评论 -
OR36 链表的回文结构 题解
本次内容到此结束了!对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。1->2->2->1 返回:true。给定一个链表的头指针。原创 2023-08-10 15:14:52 · 160 阅读 · 0 评论 -
环形链表详解
环形链表是一种特殊类型的链表数据结构,其最后一个节点的"下一个"指针指向链表中的某个节点,形成一个闭环。换句话说,链表的最后一个节点连接到了链表中的某个中间节点,而不是通常情况下连接到空指针(null)。如图:由于链表最后一个节点的下一个指针没有指向NULL,而是指向前面的某一个节点,所以我们不能再用 “current->next==NULL” 作为判断条件来遍历链表(这样会造成死循环),通常使用快慢指针来控制条件,下面的两个题目都是要借助快慢指针来实现。原创 2023-08-02 14:34:11 · 3888 阅读 · 5 评论 -
203. 移除链表元素题解
本次内容到此结束了!注:本题解题思路并不难,只需要注意特殊情况即可。,请你删除链表中所有满足。给你一个链表的头节点。原创 2023-08-09 08:14:04 · 98 阅读 · 0 评论 -
链表的中间结点 题解
利用快慢指针:当快指针一次移动两个节点、慢指针一次移动一个节点,当移动次数相同,快指针移动的距离是慢指针移动距离的二倍,所以当快指针移动到链表末尾时,慢指针刚好移动到链表的中间节点。本次内容到此结束了!如果有两个中间结点,则返回第二个中间结点。,请你找出并返回链表的中间结点。原创 2023-08-09 08:13:36 · 96 阅读 · 0 评论 -
反转链表 题解
翻转链表,我们只需要将原先的由 左面一个节点指向右面一个节点 变成 右面一个节点指向左面一个节点,最后将链表的最后一个节点作为翻转后链表的头节点返回即可。由于节点的指针域发生改变后,就不能找到下一个节点的位置了,所以我们要提前将下一个节点的位置保存下来在改变节点的指针域。当最后一次 n2 移动到 n3 的位置时(NULL),此时 n3 已经是NULL了,所以 n3 不能再向后移动了。本次内容到此结束了!该方法的空间复杂度是O(N),时间复杂度是O(N)。该方法的空间复杂度是O(1),时间复杂度是O(N)。原创 2023-08-09 08:13:14 · 141 阅读 · 0 评论 -
删除有序数组中的重复项
给你一个的数组nums,请你删除重复出现的元素,使每个元素,返回删除后数组的新长度。函数应该返回新的长度 2,并且原数组nums的前两个元素被修改为, 2.不需要考虑数组中超出新长度后面的元素。原创 2023-08-07 21:22:48 · 438 阅读 · 0 评论 -
剑指 Offer 56 - I. 数组中数字出现的次数题解
里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。本次内容到此结束了!无论得到哪一位是1,就说明有两个数在该位的二进制数不同,以此我们就可以将两个数从异或结果分离。异或运算有一个重要的性质:任何数与自身异或的结果为0,任何数与0异或的结果仍然是它本身。[1,6] 或 [6,1]原创 2023-08-07 21:31:11 · 193 阅读 · 0 评论 -
剑指 Offer 56 - II. 数组中数字出现的次数 II 题解
则只出现一次的数字在该位上的值是1(如果出现1,这个1只可能是只出现一次的数字在该位上的1,其他数字在该位上是1,一定是3的倍数,取余后结果为0)。如果一个数字出现了三次,那么它的二进制表示的每一位(0或1)是0或3,则在所有数字中在该位出现的次数也应该是3的倍数。中除一个数字只出现一次之外,其他数字都出现了三次。因此,我们可以统计所有数字的每一位上的1的个数,并对3取余,;,则只出现一次的数字在该位上的值的值为0。原创 2023-08-07 21:22:24 · 103 阅读 · 0 评论 -
判断一个数是否是回文数 题解
反转数字:使用一个循环,每次从原始数字中取出末位数字,然后将反转后的数字乘以10并加上取出的末位数字。本次内容到此结束了!负数不可能是回文数,因此如果输入的数字为负数,直接返回。将反转后的数字与原始数字进行比较:如果它们相等,说明输入的数字是回文数,返回。返回结果:如果循环结束后没有发现不相等的情况,说明输入的数字是回文数,返回。或类似的函数,将输入的数字转换为字符串。位是否相等,如果有不相等的情况,说明该数字不是回文数,返回。初始化反转后的数字为0,原始数字为要判断是否是回文数的数字。原创 2023-08-10 15:13:12 · 433 阅读 · 0 评论
分享