
leetcode
文章平均质量分 54
kiki喜欢吃蛋糕
没有更新就是去吃蛋糕啦@^ - ^@
展开
-
LeetCode-94. 二叉树的中序遍历
关于递归: 关于递归三要素: 1.确定递归函数的参数和返回值: 确定哪些参数是递归的过程中需要处理的,然后在递归函数里加上这个参数,并且确定每次递归的返回值是什么进而确定递归函数的返回值类型。 2.确定终止条件: 递归算法运行时经常会遇到栈溢出的错误。因为没写终止条件或者终止条件写的不对,如果递归没有终止,操作系统的内存栈必然就会溢出。 3.确定单层递归的逻辑: 确定每一层递归需要处理的信息,就会重复调用自己来实现递归的过程。 对应此题: 1.只需打印结点的数值,所以递归函数的返回类型就是void。 2.递原创 2021-10-08 16:57:02 · 69 阅读 · 0 评论 -
LeetCode-*143.重排列表
重排链表 给定一个单链表 L 的头节点 head ,单链表 L 表示为: L0 → L1 → … → Ln-1 → Ln 请将其重新排列后变为: L0 → Ln → L1 → Ln-1 → L2 → Ln-2 → … 不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例 1: 输入: head = [1,2,3,4] 输出: [1,4,2,3] 示例 2: 输入: head = [1,2,3,4,5] 输出: [1,5,2,4,3] 提示: 链表的长度范围为 [1, 5 * 104] .原创 2021-10-01 09:37:52 · 117 阅读 · 0 评论 -
LeetCode-206.反转链表
示例 1: 输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1] 示例 2: 输入:head = [1,2] 输出:[2,1] 示例 3: 输入:head = [] 输出:[] 提示: 链表中节点的数目范围是 [0, 5000] -5000 <= Node.val <= 5000 进阶:链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题? 相当于将指向(箭头)倒置,很简单的思路。注意保存当前结点的next结点。 /** * Definition for si原创 2021-09-30 21:55:11 · 108 阅读 · 0 评论 -
LeetCode-142.环形链表II
给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。 说明:不允许修改给定的链表。 进阶: 你是否可以使用 O(1) 空间解决此题? 示例 1: 输入:head = [3,2,0,-4], pos = 1 输出:返回索引为 1 的链表节点 解释:链表中有一个环,其尾部连接原创 2021-09-26 10:06:55 · 101 阅读 · 0 评论 -
LeetCode-141.环形列表
给定一个链表,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。 如果链表中存在环,则返回 true 。 否则,返回 false 。 进阶: 你能用 O(1)(即,常量)内存解决此问题吗? 示例 1: 输入:head = [3,2,0,-4], p原创 2021-09-22 20:43:09 · 85 阅读 · 0 评论 -
LeetCode-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] 提示: 链表中节点数目为 n 1 <= n <= 500 -500 <=原创 2021-09-20 10:36:43 · 90 阅读 · 0 评论 -
LeetCode-86.分隔链表
给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你应当 保留 两个分区中每个节点的初始相对位置。 示例 1: 输入:head = [1,4,3,2,5,2], x = 3 输出:[1,2,2,4,3,5] 示例 2: 输入:head = [2,1], x = 2 输出:[1,2] 分析: 设置两个链表,一个放大于x值的结点,另一个放小于x值的结点,最后拼接。 注意:循环条件到p为空时。 代码: /** * Defi原创 2021-09-16 21:18:52 · 154 阅读 · 0 评论 -
LeetCode-82.删除排序链表中重复元素二
一.链栈的定义: 和单链表一样, typedef struct Linknode{ int x; //数据域 struct Linknode *next; //指针域 }*LiStack; //栈类型原创 2021-09-16 10:56:52 · 83 阅读 · 0 评论 -
LeetCode-24.两两交换链表中的结点
题目: 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例 1: 输入:head = [1,2,3,4] 输出:[2,1,4,3] 示例 2: 输入:head = [] 输出:[] 示例 3: 输入:head = [1] 输出:[1] 提示: 链表中节点的数目在范围 [0, 100] 内 0 <= Node.val <= 100 进阶:你能在不修改链表节点值的情况下解决这个问题吗?(也就是说,仅修改节点本身。) 分析原创 2021-09-13 21:58:42 · 77 阅读 · 0 评论 -
LeetCode-61.旋转链表
题目: 给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。 示例 1: 输入:head = [1,2,3,4,5], k = 2 输出:[4,5,1,2,3] 示例 2: 输入:head = [0,1,2], k = 4 输出:[2,0,1] 提示: 链表中节点的数目在范围 [0, 500] 内 -100 <= Node.val <= 100 0 <= k <= 2 * 109 分析: 此题并不难,主要运用循环链表来解决。找到在什么地方断开,主要是一原创 2021-09-13 19:32:56 · 76 阅读 · 0 评论 -
LeetCode-2.两数相加
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,原创 2021-09-08 21:14:36 · 95 阅读 · 0 评论 -
LeetCode-19.删除链表的倒数第N个结点
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] 提示: 链表中结点的数目为 sz 1 <= sz <= 30 0 <= Node.val <= 100 1 <原创 2021-09-07 21:23:02 · 62 阅读 · 0 评论 -
LeetCode-21.合并两个有序链表
21.合并两个有序单链表: 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 2: 输入:l1 = [], l2 = [] 输出:[] 示例 3: 输入:l1 = [], l2 = [0] 输出:[0] 提示: 两个链表的节点数目范围是 [0, 50] -100 <= Node.val <= 100 l1 和 l2 均按 非递减顺序 排列 思路: 这是一道简单的题目,最优的方法是用递归解决。在这里贴出两种方法来参考: 非递归: stru原创 2021-09-06 20:04:32 · 83 阅读 · 0 评论