链表
文章平均质量分 51
小马哥MAX
刷题记录BLOG
展开
-
【两次过】Leetcode 23. 合并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]将它们合并到一个有序链表中得到。原创 2022-09-27 08:53:10 · 158 阅读 · 1 评论 -
【两次过】Leetcode 86. 分割链表
给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。你应当 保留 两个分区中每个节点的初始相对位置。给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。你应当 保留 两个分区中每个节点的初始相对位置。原创 2022-09-26 08:55:08 · 232 阅读 · 0 评论 -
【简单】Lintcode 167:链表求和
You have two numbers represented by a linked list, where each node contains a single digit. The digits are stored inreverseorder, such that the 1's digit is at the head of the list. Write a function...原创 2018-05-07 23:05:55 · 147 阅读 · 0 评论 -
【一次过】合并两个排序的链表
题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。解题思路:归并中的merge操作。/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/...原创 2019-04-14 11:08:26 · 121 阅读 · 0 评论 -
【两次过】Lintcode 378. 将二叉查找树转换成双链表
将一个二叉查找树按照中序遍历转换成双向链表。样例样例 1:输入: 4 / \ 2 5 / \ 1 3 输出: 1<->2<->3<->4<->5样例 2:输入: 3 / \ 4 1输出:4<->3<->1解题思路1:分...原创 2019-04-23 11:20:22 · 276 阅读 · 0 评论 -
【一次过】二叉搜索树与双向链表
题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。解题思路:与Lintcode 378. 将二叉查找树转换成双链表类似,不同的是这个不需要新建节点。/**public class TreeNode { int val = 0; TreeNode left = null; TreeNo...原创 2019-05-03 09:37:03 · 176 阅读 · 0 评论 -
【一次过】Lintcode 102: 带环链表
给定一个链表,判断它是否有环。样例```样例 1: 输入: 21->10->4->5, then tail connects to node index 1(value 10). 输出: true 样例 2: 输入: 21->10->4->5->null 输出: false```挑战不要使用额外的空间解题思...原创 2018-05-26 13:26:45 · 275 阅读 · 0 评论 -
【三次过】Lintcode 173:链表插入排序
用插入排序对链表排序样例Given1->3->2->0->null, return0->1->2->3->null解题思路: 创建一个dummy链表,从head链表中依次向dummy链表中按插入排序规则添加节点。 下图中原链表其实是不用删除,只需要向后遍历即可,即图中原链表的头节点对应head节点。每次d...原创 2018-06-09 21:43:58 · 215 阅读 · 0 评论 -
【一次过】Lintcode 174:删除链表中倒数第n个节点
给定一个链表,删除链表中倒数第n个节点,返回链表的头节点。样例给出链表1->2->3->4->5->null和 n = 2.删除倒数第二个节点之后,这个链表将变成1->2->3->5->null.挑战O(n)时间复杂度解题思路: 双指针法。/** * Definition for ...原创 2018-06-10 10:56:41 · 129 阅读 · 0 评论 -
【两次过】Lintcode 451. 两两交换链表中的节点
给一个链表,两两交换其中的节点,然后返回交换后的链表。样例给出1->2->3->4, 你应该返回的链表是2->1->4->3。挑战你的算法只能使用常数的额外空间,并且不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。解题思路1: 最简单的做法是不进行实际节点交换,仅仅交换它们的值即可。/** * Defi...原创 2018-06-18 21:17:23 · 136 阅读 · 0 评论 -
【一次过】Lintcode 1292. 奇偶链表
给定单链表,将所有奇数节点连接在一起,然后将偶数节点连接在一起。 请注意,这里我们讨论的是节点编号,而不是节点中的值。样例样例1:输入: 1->2->3->4->5->NULL输出: 1->3->5->2->4->NULL样例2:输入: 2->1->null输出: 2->1->null...原创 2018-07-10 09:10:32 · 161 阅读 · 0 评论 -
【一次过】Lintcode 221. 链表求和 II
假定用一个链表表示两个数,其中每个节点仅包含一个数字。假设这两个数的数字顺序排列,请设计一种方法将两个数相加,并将其结果表现为链表的形式。样例给出6->1->7+2->9->5。即,617 + 295。返回9->1->2。即,912。解题思路: 可以先翻转链表得到倒序链表,然后按照Lintcode 167:Add Two...原创 2018-07-10 09:55:43 · 226 阅读 · 0 评论 -
【两次过】Lintcode 170. 旋转链表
给定一个链表,旋转链表,使得每个节点向右移动k个位置,其中k是一个非负数样例给出链表1->2->3->4->5->null和k=2返回4->5->1->2->3->null解题思路: 双指针法。 需要注意旋转操作,需要取k除链表长度的余数。/** * Definition for Li...原创 2018-07-12 21:50:23 · 188 阅读 · 0 评论 -
【一次过】Lintcode 822. 相反的顺序存储
给出一个链表,并将链表的值以in reverse order存储到数组中。样例给定1 -> 2 -> 3 -> null,返回[3,2,1]。解题思路:简单,直接看代码。class Solution {public: /** * @param head: the given linked list * @return: the ...原创 2018-07-20 11:06:42 · 232 阅读 · 0 评论 -
【一次过】Lintcode 223. 回文链表
设计一种方式检查一个链表是否为回文链表。样例1->2->1就是一个回文链表。挑战O(n)的时间和O(1)的额外空间。解题思路1:链表比字符串难的地方就在于不能通过坐标来直接访问,而只能从头开始遍历到某个位置。那么根据回文串的特点,我们需要比较对应位置的值是否相等,那么我们首先需要找到链表的中点,这个可以用快慢指针来实现,原理是fast和slow两个指针,每次快...原创 2018-07-29 18:36:59 · 182 阅读 · 0 评论 -
【一次过】Lintcode 786. 链表的反向带权和
给定一个链表,求出这个链表的带权和。链表结点的权值指的是该结点到链表尾节点的结点数。样例样例1输入: 3 -> 2 -> 5 -> 1输出: 29解释:(3 * 4 + 2 * 3 + 5 * 2 + 1) = 29样例2输入: 1 -> 2 -> 3 -> 4输出: 20解释:(1 * 4 + 2 * 3 + 3 * 2 ...原创 2019-02-15 09:52:04 · 118 阅读 · 0 评论 -
【一次过】Lintcode 217. 无序链表的重复项删除
设计一种方法,从无序链表中删除重复项。样例样例 1:输入:1->2->1->3->3->5->6->3->null输出:1->2->3->5->6->null样例 2:输入:2->2->2->2->2->null输出:2-&原创 2019-01-22 20:02:40 · 602 阅读 · 0 评论 -
【两次过】Lintcode 106. 有序链表转换为二分查找树
给出一个所有元素以升序排序的单链表,将它转换成一棵高度平衡的二分查找树样例 21->2->3 => / \ 1 3解题思路:明显的思路是寻找链表的中间节点,然后得到其根节点,然后分割链表为左右两部分,继续递归的寻找每部分链表的中间节点作为根节点的左右子树。一个问题在于不能直接寻找中间节点,因为...原创 2019-01-15 11:23:06 · 271 阅读 · 0 评论 -
【一次过】Lintcode 112:删除排序链表中的重复元素
给定一个排序链表,删除所有重复的元素每个元素只留下一个。样例给出 1->1->2->null,返回 1->2->null给出 1->1->2->3->3->null,返回 1->2->3->null解题思路: 非常简单,用一个指针currentNode与他的下一个元素两者的值进行比较,若相同则删...原创 2018-05-03 17:22:29 · 156 阅读 · 0 评论 -
【一次过】Lintcode 113. 删除排序链表中的重复数字 II
给定一个排序链表,删除所有重复的元素只留下原链表中没有重复的元素。样例给出1->2->3->3->4->4->5->null,返回1->2->5->null给出1->1->1->2->3->null,返回2->3->null解题思路: 照例新建一个dummy节点作...原创 2018-07-11 09:08:35 · 162 阅读 · 0 评论 -
【两次过】Lintcode 35:翻转链表
反转链表。例对于链表 1->2->3,反向链表是3->2->1解题思路: 新建三个指针,CUR指向当前需要反转的节点,预先指向CUR前一个节点(因为当CUR向后移动时会丢失前一个节点的数据),下一个指向CUR后一个节点,如图:执行一个节点的反转:然后移动到下一个节点,反转下一个节点:依次循环操作。/** * Defi...原创 2018-01-26 23:06:47 · 220 阅读 · 0 评论 -
【一次过】Lintcode 36. 翻转链表 II
翻转链表中第米个节点到第Ñ个节点的部分样例给出链表1-> 2-> 3-> 4-> 5-> null,m = 2和n = 4,返回1-> 4-> 3-> 2-> 5-> null挑战在原地一次翻转完成解题思路: 在[m,n]区间翻转的操作与Lintcode 35:Reverse Linked List相同...原创 2018-07-09 10:53:31 · 293 阅读 · 0 评论 -
【两次过】Lintcode 380. 相交链表
请写一个程序,找到两个单链表最开始的交叉节点。样例下列两个链表:A: a1 → a2 ↘ c1 → c2 → c3 ↗ B: b1 → b2 → b3在节点 c1 开始交叉。挑战需满足 O(n) 时间复杂...原创 2018-11-07 11:39:36 · 333 阅读 · 0 评论 -
【一次过】Lintcode 96: 链表划分
给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前。你应该保留两部分内链表节点原有的相对顺序。 样例给定链表 1->4->3->2->5->2->null,并且 x=3返回 1->2->2->4->3->5->null.解题思路1: 可将整个链表先分离为两个小的链...原创 2018-05-01 17:33:23 · 191 阅读 · 0 评论 -
【三次过】Lintcode 98. 链表排序
在O(n log n)时间复杂度和常数级的空间复杂度下给链表排序。样例给出 1->3->2->null,给它排序变成 1->2->3->null。挑战分别用归并排序和快速排序做一遍。解题思路1:快排。参考快速排序完美优化版/** * Definition for ListNode * public class ListN...原创 2018-11-05 10:24:27 · 186 阅读 · 0 评论 -
【一次过】Lintcode 904. 加一链表
给定一个非负整数,这个整数表示为一个非空的单链表,每个节点表示这个整数的一位。返回这个整数加一。除了0本身,所有数字在最高位前都没有0。列表的头节点存的是这个整数的最高位。样例给出链表1 -> 2 -> 3 -> null,返回1 -> 2 -> 4 -> null。解题思路:因为可能头节点会变化,所以设置dummy结点,特别地,将du...原创 2018-11-08 10:30:35 · 245 阅读 · 0 评论 -
【一次过】Lintcode 103. 带环链表 II
给定一个链表,如果链表中存在环,则返回到链表中环的起始节点,如果没有环,返回null。样例给出-21->10->4->5,返回10解释:最后一个节点5指向下标为1的节点,也就是10,所以环的入口为10挑战不使用额外的空间解题思路:在网上搜集了一下这个问题相关的一些问题,思路开阔了不少,总结如下:1. 环的长度是多少?2. 如何找到环中第一个节点...原创 2018-11-08 11:02:16 · 141 阅读 · 0 评论 -
【两次过】Lintcode 105. 复制带随机指针的链表
给出一个链表,每个节点包含一个额外增加的随机指针可以指向链表中的任何节点或空的节点。返回一个深拷贝的链表。挑战可否使用O(1)的空间解题思路1:利用HashMap。分为两步:1、顺序复制原始链表上的每个节点,不包含random指针。同时将原链表节点与复制链表节点的对应关系保存到map中,方便后续random指针的对应。2、遍历map,先找到原节点random的指向,然...原创 2018-11-15 09:44:39 · 132 阅读 · 0 评论 -
【一次过】Lintcode 219. 在排序链表中插入一个节点
在链表中插入一个节点。样例给出一个链表 1->4->6->8 和 val = 5.。插入后的结果为 1->4->5->6->8。解题思路:简单。考虑到可能插入到表头,所以需要dummy节点做辅助。/** * Definition for ListNode * public class ListNode { * int...原创 2018-12-28 10:32:02 · 928 阅读 · 0 评论 -
【一次过】Lintcode 228. 链表的中点
找链表的中点。样例链表 1->2->3 的中点是 2。链表 1->2 的中点是 1。挑战如果链表是一个数据流,你可以不重新遍历链表的情况下得到中点么?解题思路:快慢指针。/** * Definition for ListNode * public class ListNode { * int val; * ListNode...原创 2018-12-28 10:38:11 · 426 阅读 · 0 评论 -
【一次过】Lintcode 242. 将二叉树按照层级转化为链表
给一棵二叉树,设计一个算法为每一层的节点建立一个链表。也就是说,如果一棵二叉树有D层,那么你需要创建D条链表。样例对于二叉树: 1 / \ 2 3 /4返回3条链表:[ 1->null, 2->3->null, 4->null]解题思路:类似于Lintcode 69:二叉树的层次遍历,只不过换成链表存储...原创 2019-01-24 17:30:10 · 627 阅读 · 0 评论 -
【两次过】Lintcode 104. 合并k个排序链表
合并k个排序链表,并且返回合并后的排序链表。尝试分析和描述其复杂度。样例给出3个排序链表[2->4->null,null,-1->null],返回-1->2->4->null解题思路:分治法。可以看作先合并左边k/2条,再合并右边k/2条,最后将左右两条合并即可。/** * Definition for ListNode. * pub...原创 2019-01-15 10:30:49 · 121 阅读 · 0 评论 -
【两次过】Lintcode 99. 重排链表
给定一个单链表L: L 0→ L 1→...→ L n-1→ L n,重新排列后为:L 0→ L n→ L 1→ L n-1→ L 2→ L n-2→......必须在不改变节点值的情况下进行原地操作。样例给出链表 1->2->3->4->null,重新排列后为1->4->2->3->null。挑战你可以在 不改变...原创 2018-07-13 11:01:08 · 181 阅读 · 0 评论