LeetCode
leetcode刷题
XiYang-DING
cpper|今年主更新c三剑客,加油
展开
-
【LeetCode】 Easy | 572. 另一棵树的子树
Q代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */bool isSameTree(struct TreeNode*root1,struct TreeNode *root2){ if(root1==NULL&&root2==N原创 2022-03-27 20:22:28 · 218 阅读 · 0 评论 -
【LeetCode】Easy | 101. 对称二叉树
Q代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */bool _isSymmetric(struct TreeNode*root1,struct TreeNode* root2){ if(root1==NULL&&root2=原创 2022-03-27 19:29:43 · 528 阅读 · 0 评论 -
【LeetCode】Easy | 100. 相同的树
Q代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */bool isSameTree(struct TreeNode* p, struct TreeNode* q){ //两个都为空 if(p==NULL&&q==NU原创 2022-03-27 19:25:00 · 320 阅读 · 0 评论 -
【LeetCode】Easy | 144. 二叉树的前序遍历
Q思路如何对树进行前遍历而且将每个数存入数组中?① 如何遍历:写子程序_preorderTraversal(struct TreeNode*root)内容为递归(根左右)② 如何存入数组:在子程序中传入数组_preorderTraversal(struct TreeNode*root,int *a)③ 如何控制数组的下标:如果传入_preorderTraversal(struct TreeNode*root,int *a,int i)由于是递归形式可能会出现i=2(随便举例子也可能是i=3…原创 2022-03-27 11:20:56 · 165 阅读 · 0 评论 -
【LeetCode】Easy | 965. 单值二叉树
Q思路① 利用数学中简单的传递性原理,根左右三个为一组判断(如图)② 从根开始检查 ,检查到叶子节点前面没问题return true;若中间有一个不对return false代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */bool i原创 2022-03-27 10:36:11 · 1269 阅读 · 0 评论 -
【LeetCode】Medium | 622. 设计循环队列
题目代码typedef struct { int* arry; int front; int tail; int size;//数组大小} MyCircularQueue;bool myCircularQueueIsEmpty(MyCircularQueue* obj);bool myCircularQueueIsFull(MyCircularQueue* obj);MyCircularQueue* myCircularQueueCreate(int k) { MyCirc原创 2022-02-17 15:46:01 · 54 阅读 · 0 评论 -
【LeetCode】Easy | 232. 用栈实现队列 (纯c手撕栈)
题目思路两个结构的特点:① 队:尾插 + 头删 ② 栈:尾插 + 尾删尾插的思路:若两个栈都为空,随便选一个栈Push;若两个栈其中有一个不为空,那么选不为空的栈Push头删的思路:找到不为空的栈 --> 将前n−1n − 1n−1 个元素Push到空栈中 --> 将第n 个元素Pop --> 由于push到空栈的顺序与原顺序相反所以将剩下的元素Push到现在的空栈中与题【225. 用队列实现栈】不同的是,这个需要反转一次。代码typedef int STDataTy原创 2022-02-15 21:13:07 · 255 阅读 · 0 评论 -
【LeetCode】Easy | 225. 用队列实现栈 (纯c手撕队列)
题目思路两个结构的特点:① 队:尾插 + 头删 ② 栈:尾插 + 尾删尾插的思路:若两个队都为空,随便选一个队Push;若两个队其中有一个不为空,那么选不为空的队Push尾删的思路:找到不为空的队 --> 将前n−1n-1n−1个元素Push到空队中 --> 将第nnn个元素Pop规律:其实不难看出该题运行必有一个空队。代码typedef int DataType;typedef struct QueueNode{ DataType dat原创 2022-02-15 20:44:28 · 368 阅读 · 0 评论 -
【LeetCode】Easy | 20. 有效的括号
题目:思路:如图代码:typedef char STDataType;typedef struct Stack{ STDataType* a; int top; int capacity;}ST;//初始化void StackInit(ST* ps){ assert(ps); ps->a = NULL; ps->top = 0; ps->capacity = 0;}//入栈void StackPush(ST* ps, STDataType x)原创 2022-02-13 19:15:04 · 70 阅读 · 0 评论 -
【LeetCode】Easy | 83. 删除排序链表中的重复元素(双指针)
题目:给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。示例 1:输入:head = [1,1,2]输出:[1,2]示例 2:输入:head = [1,1,2,3,3]输出:[1,2,3]提示:链表中节点数目在范围 [0, 300] 内-100 <= Node.val <= 100题目数据保证链表已经按升序 排列来源:力扣(LeetCode)链接:https://leetcode-cn.com/probl原创 2022-02-05 10:08:50 · 128 阅读 · 0 评论 -
【LeetCode】Medium | 92. 反转链表 II (三指针)
题目:给你单链表的头指针head 和两个整数left和 right ,其中 left <= right 。请你反转从位置left 到位置 right的链表节点,返回 反转后的链表 。示例 1:输入:head = [1,2,3,4,5], left = 2, right = 4输出:[1,4,3,2,5]示例 2:输入:head = [5], left = 1, right = 1输出:[5]提示:链表中节点数目为 n1 <= n <= 500-500 <原创 2022-02-04 22:54:23 · 273 阅读 · 0 评论 -
【LeetCode】Medium | 19. 删除链表的倒数第 N 个结点(快慢指针)
题目:给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。示例 1:输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]示例 2:输入:head = [1], n = 1输出:[]示例 3:输入:head = [1,2], n = 1输出:[1]提示:链表中结点的数目为 sz1 <= sz <= 300 <= Node.val <= 1001 <= n <= sz来源:力扣(LeetCo原创 2022-02-03 21:51:57 · 176 阅读 · 0 评论 -
【LeetCode】Medium | 2. 两数相加(笨比办法)
题目:给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例 1:输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.示例 2:输入:l1 = [0], l2 = [0]输出:[0]示例 3:输入:l1 = [9,9,9,9,9,9,9]原创 2022-02-03 21:07:26 · 95 阅读 · 0 评论 -
【LeetCode】Medium | 142. 环形链表 II(快慢指针 | 链表相交)
题目:给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。如果链表中有某个节点,可以通过连续跟踪 next指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数pos来表示链表尾连接到链表中的位置(索引从 0 开始)。如果pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。不允许修改 链表。示例 1:输入:head = [3,2,0,-4], pos = 1输出:返回索引为 1 的链表节点解释:原创 2022-02-03 19:18:06 · 93 阅读 · 0 评论 -
【LeetCode】Easy | 141.环形链表(快慢指针)
题目:给你一个链表的头节点 head,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪next指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。如果链表中存在环 ,则返回 true 。 否则,返回false 。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个原创 2022-02-03 18:47:13 · 458 阅读 · 0 评论 -
【LeetCode】Easy | 160. 相交链表(暴力 | 双指针)
题目:给你两个单链表的头节点 headA 和headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null。图示两个链表在节点 c1 开始相交:题目数据 保证 整个链式结构中不存在环。注意,函数返回结果后,链表必须 保持其原始结构 。自定义评测:评测系统 的输入如下(你设计的程序 不适用 此输入):intersectVal - 相交的起始节点的值。如果不存在相交节点,这一值为 0listA - 第一个链表listB - 第二个链表skipA - 在原创 2022-01-30 23:49:02 · 92 阅读 · 0 评论 -
【LeetCode】Easy | 21. 合并两个有序链表
题目:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例 1:输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]示例 2:输入:l1 = [], l2 = []输出:[]示例 3:输入:l1 = [], l2 = [0]输出:[0]提示:两个链表的节点数目范围是 [0, 50]-100 <= Node.val <= 100l1 和 l2 均按 非递减顺序 排列来源:原创 2022-01-28 19:35:05 · 74 阅读 · 0 评论 -
【LeetCode】Easy | 876. 链表的中间结点(快慢指针)
题目:给定一个头结点为 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。示例 1:输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式:[3,4,5])返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。注意,我们返回了一个 ListNode 类型的对象 ans,这样:ans.val = 3, ans.next.val = 4, ans.next.next.val = 5, 以及 ans.next.next.next原创 2022-01-28 16:35:45 · 54 阅读 · 0 评论 -
【LeetCode】Easy | 206. 反转链表(三指针 | 头插法)
题目:给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。示例一:输入:head = [1,2,3,4,5]输出:[5,4,3,2,1]示例二:输入:head = [1,2]输出:[2,1]示例三:输入:head = []输出:[]提示:链表中节点的数目范围是 [0, 5000]-5000 <= Node.val <= 5000思路:特殊情况:链表为空代码:struct ListNode* reverseList(struct原创 2022-01-19 23:42:32 · 180 阅读 · 0 评论 -
【LeetCode】Easy | 203. 移除链表元素
Q:给你一个链表的头节点 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输出:[]S:/** * Definition for singly-linked list. *原创 2021-10-24 15:53:29 · 80 阅读 · 0 评论 -
【LeetCode】Easy | 26. 删除有序数组中的重复项
Q给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1)O(1)O(1) 额外空间的条件下完成。输入:nums = [1,1,2]输出:2, nums = [1,2]解释:函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2 。不需要考虑数组中超出新长度后面的元素。输入:nums = [0,0,1,1,1,2,2,3,3,4]输出:5,转载 2021-10-19 21:11:34 · 85 阅读 · 0 评论 -
【LeetCode】Easy | 27.移除元素
Q给你一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1)O(1)O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。S思路一:覆盖法,一个一个遍历找到后让后面数字覆盖总长度-1时间复杂度:O(N2)O(N^2)O(N2)int removeElement(int* nums, int numsSize, int val){ for原创 2021-10-17 11:31:29 · 76 阅读 · 0 评论 -
【LeetCode】面试题 17.04. 消失的数字的两种解法
Question:数组nums包含从0到n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗?示例 1:输入:[3,0,1]输出:2示例 2:输入:[9,6,4,2,3,5,7,0,1]输出:8...原创 2021-10-13 23:24:14 · 252 阅读 · 0 评论