![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode-链表
KobeSacre
这个作者很懒,什么都没留下…
展开
-
二叉搜索树与双向链表
leetcode原创 2022-09-28 10:15:50 · 77 阅读 · 0 评论 -
复杂链表的复制
leetcode原创 2022-09-26 14:59:27 · 58 阅读 · 0 评论 -
删除链表的节点
【代码】删除链表的节点。原创 2022-09-06 15:49:20 · 87 阅读 · 0 评论 -
排序的循环链表
排序的循环链表题目:给定循环单调非递减列表中的一个点,写一个函数向这个列表中插入一个新元素 insertVal ,使这个列表仍然是循环升序的。给定的可以是这个列表中任意一个顶点的指针,并不一定是这个列表中最小元素的指针。如果有多个满足条件的插入位置,可以选择任意一个位置插入新的值,插入后整个列表仍然保持有序。如果列表为空(给定的节点是 null),需要创建一个循环有序列表并返回这个节点。否则。请返回原先给定的节点。 示例 1:输入:head = [3,4,1], insertVa原创 2022-04-08 15:11:17 · 273 阅读 · 0 评论 -
加一的链表
加一链表题目:描述给定一个非负整数,这个整数表示为一个非空的单链表,每个节点表示这个整数的一位。返回这个整数加一。除了0本身,所有数字在最高位前都没有0。列表的头节点存的是这个整数的最高位。样例样例1输入: 1 -> 2 -> 3 -> null输出: 1 -> 2 -> 4 -> null解释:123 + 1 = 124样例2输入: 9 -> 9 -> null输出: 1 -> 0 -> 0 -> null原创 2022-04-07 15:54:40 · 568 阅读 · 0 评论 -
链表中的两数相加
链表中的两数相加题目:给定两个 非空链表 l1和 l2 来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。可以假设除了数字 0 之外,这两个数字都不会以零开头。示例1:输入:l1 = [7,2,4,3], l2 = [5,6,4]输出:[7,8,0,7]示例2:输入:l1 = [2,4,3], l2 = [5,6,4]输出:[8,0,7]示例3:输入:l1 = [0], l2 = [0]输出:[0]解题思路:因为最原创 2022-03-23 16:31:06 · 190 阅读 · 0 评论 -
链表的中间结点
链表的中间结点给定一个头结点为 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.原创 2022-01-15 21:33:45 · 56 阅读 · 0 评论 -
将二叉树转换成双链表
将二叉树转换成双链表题目:描述将一个二叉树按照中序遍历转换成双向链表。样例样例 1:输入: 4 / \ 2 5 / \ 1 3 输出: 1<->2<->3<->4<->5样例 2:输入: 3 / \ 4 1输出:4<->3<->1解题思路1:先用队列存储二叉树中序遍历结果,然后遍历队列建立双向链表/** * Definition f原创 2021-07-06 10:52:18 · 464 阅读 · 0 评论 -
在O(1)时间复杂度删除链表节点
在O(1)时间复杂度删除链表节点题目:描述给定一个单链表中的一个等待被删除的节点(非表头或表尾)。请在在 O(1) 时间复杂度删除该链表节点。样例样例 1:输入:1->2->3->4->null3输出:1->2->4->null样例 2:输入:1->3->5->null3输出:1->5->null解题思路:需要在O(1)时间复杂度,无法更改前一节点的属性,所以只能更改本节点,因此将next的val原创 2021-07-05 16:38:34 · 247 阅读 · 0 评论 -
有序链表转换二叉搜索树
有序链表转换二叉搜索树题目:给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定的有序链表: [-10, -3, 0, 5, 9],一个可能的答案是:[0, -3, 9, -10, null, 5], 它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 9 / / -10 5解题思路:因为输入数据是升序排列,所以原创 2021-07-05 16:14:19 · 156 阅读 · 0 评论 -
交换链表当中两个节点
交换链表当中两个节点题目:描述给你一个链表以及两个权值v1和v2,交换链表中权值为v1和v2的这两个节点。保证链表中节点权值各不相同,如果没有找到对应节点,那么什么也不用做。你需要交换两个节点而不是仅仅交换节点的权值样例样例 1:输入: 1->2->3->4->null, v1 = 2, v2 = 4输出: 1->4->3->2->null样例 2:输入: 1->null, v1 = 2, v2 = 1输出: 1->null原创 2021-07-02 14:33:49 · 1540 阅读 · 0 评论 -
翻转链表(二)
翻转链表(二)题目:描述翻转链表中第 m 个节点到第 n 个节点的部分。m,n 满足1 ≤ m ≤ n ≤ 链表长度样例样例 1:输入:链表 = 1->2->3->4->5->NULLm = 2n = 4输出:1->4->3->2->5->NULL解释:翻转链表[2,4]位置。样例 2:输入:链表 = 1->2->3->4->nullm = 2n = 3输出:1->3->原创 2021-07-02 10:50:43 · 55 阅读 · 0 评论 -
链表划分
链表划分题目:描述给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前。你应该保留两部分内链表节点原有的相对顺序。样例样例 1:输入:list = nullx = 0输出:null解释:空链表本身满足要求样例 2:输入:list = 1->4->3->2->5->2->nullx = 3输出:1->2->2->4->3->5->null/** * Definition fo原创 2021-07-02 09:48:32 · 132 阅读 · 0 评论 -
K组翻转链表
K组翻转链表题目:描述给定一个链表,一次反转链表 k 的节点并返回其修改后的列表。如果节点的数量不是k的倍数,那么最后遗漏的节点应该保持原样。不能更改节点中的值,只能更改节点本身。只允许使用常量内存。样例样例1输入:list = 1->2->3->4->5->nullk = 2输出:2->1->4->3->5样例2输入:list = 1->2->3->4->5->nullk = 3输出:原创 2021-07-02 00:13:12 · 121 阅读 · 0 评论 -
合并K个升序链表
合并K个升序链表题目:给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。示例 1:输入:lists = [[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[1->4->5,1->3->4,2->6]将它们合并到一个有序链表中得到。1->1->2->3->4->4->5->6示例 2:输入:lists =原创 2021-05-25 13:29:09 · 48 阅读 · 0 评论 -
排序链表
排序链表题目:给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。示例 1:输入:head = [4,2,1,3]输出:[1,2,3,4]示例 2:输入:head = [-1,5,3,4,0]输出:[-1,0,3,4,5]示例 3:输入:head = []输出:[]解题思路:使用归并排序对链表进行排序,首先寻找链表的中点,之后根据中点对链表进行分割,然后对分割后的链表进行合并即可/** * Definition for singly-linked lis原创 2021-05-24 11:24:49 · 99 阅读 · 0 评论 -
对链表进行插入排序
对链表进行插入排序题目:示例 1:输入: 4->2->1->3输出: 1->2->3->4示例 2:输入: -1->5->3->4->0输出: -1->0->3->4->5解题思路:需要维护几个引用来记录当前已排序的和正在排序的节点,当找到大于当前要排序的节点值后进行插入操作/** * Definition for singly-linked list. * public class ListNode原创 2020-11-20 10:57:28 · 97 阅读 · 2 评论 -
从尾到头打印链表
从尾到头打印链表题目: 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]解题思路: 很好想的一道题, 用LinkedList的addFirst解决计即可/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) {原创 2020-10-23 15:04:15 · 78 阅读 · 0 评论 -
旋转链表
旋转链表题目: 给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。示例 1:输入: 1->2->3->4->5->NULL, k = 2输出: 4->5->1->2->3->NULL解释:向右旋转 1 步: 5->1->2->3->4->NULL向右旋转 2 步: 4->5->1->2->3->NULL示例 2:输入: 0->1->原创 2020-10-23 14:55:25 · 81 阅读 · 0 评论 -
扁平化多级双向链表
扁平化多级双向链表题目:多级双向链表中,除了指向下一个节点和前一个节点指针之外,它还有一个子链表指针,可能指向单独的双向链表。这些子列表也可能会有一个或多个自己的子项,依此类推,生成多级数据结构,如下面的示例所示。给你位于列表第一级的头节点,请你扁平化列表,使所有结点出现在单级双链表中。示例 1:输入:head = [1,2,3,4,5,6,null,null,null,7,8,9,10,null,null,11,12]输出:[1,2,3,7,8,11,12,9,10,4,5,6]解释:输入原创 2020-10-22 17:10:08 · 146 阅读 · 0 评论 -
两数相加
两数相加题目:给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807解题思路: 直接模拟, 注意一些特殊情况(9+1)原创 2020-10-21 11:26:11 · 93 阅读 · 0 评论 -
合并两个有序链表
合并两个有序链表将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。题目:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4解题思路: 用两个指针分别指向两个链表, 对链表值进行比较选择较小一个./** * Definition for singly-linked l原创 2020-10-21 10:49:08 · 126 阅读 · 0 评论 -
重排链表
重排链表题目:给定一个单链表 L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→…你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例 1:给定链表 1->2->3->4, 重新排列为 1->4->2->3.示例 2:给定链表 1->2->3->4->5, 重新排列为 1->5->2->4->3.解题思路: 最好想到的就是用遍历链表把链表添原创 2020-10-20 10:17:57 · 329 阅读 · 1 评论 -
回文链表
回文链表题目:请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true解题思路: 先遍历链表求得长度, 再根据回文性质将头节点到中间节点进行反转, 最后进行比较.还有一种比较好想的思路就是遍历链表将其转化为数组然后进行判断./** * Definition for singly-linked list. * public class ListNode { * int val;原创 2020-10-19 16:49:48 · 118 阅读 · 0 评论 -
奇偶链表
奇偶链表题目:给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。示例 1:输入: 1->2->3->4->5->NULL输出: 1->3->5->2->4->NULL示例 2:输入: 2->1->3->5->原创 2020-10-19 16:00:07 · 362 阅读 · 0 评论 -
反转链表
反转链表题目:反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL解题思路: 在纸上画一画, 找到规律就可以写出来/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) {原创 2020-10-19 15:35:34 · 67 阅读 · 0 评论 -
删除链表的倒数第N个节点
删除链表的倒数第N个节点给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。解题思路: 用两个指针一前一后遍历链表,两者相差 n + 1个节点, 当前面的指针遍历完链表后, 后面的指针位置就是需要删除的节点的前一个位置.class Solution { public Lis原创 2020-10-16 15:43:13 · 58 阅读 · 0 评论 -
相交链表
leetcode原创 2020-10-16 15:08:52 · 107 阅读 · 0 评论 -
环形链表 II
环形链表 II题目: 给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。说明:不允许修改给定的链表。解题思路: 还是运用快慢指针, 不过这次在两指针相遇后应将fast重置为head再走一次链表直到快慢指针相遇, 具体原理请阅读Krahets大佬的题解public原创 2020-10-16 14:43:34 · 59 阅读 · 0 评论 -
环形链表
环形链表题目: 给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false解题思路: 运用快慢指针, 如果有环快指针一定会追上慢指针public class Solution原创 2020-10-16 14:33:02 · 212 阅读 · 0 评论