摘要: 题目: 给定一个链表(链表结点包含一个整型值)的头结点 head。 同时给定列表 G,该列表是上述链表中整型值的一个子集。 返回列表 G 中组件的个数,这里对组件的定义为:链表中一段最长连续结点的值(该值必须在列表 G 中)构成的集合。 示例 1: 输入: head: 0->1->2->3G = [ 阅读全文
posted @ 2020-05-01 23:56 梦醒潇湘 阅读(164) 评论(0) 推荐(0)
摘要: 题目: 编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。 示例1: 输入:[1, 2, 3, 3, 2, 1] 输出:[1, 2, 3]示例2: 输入:[1, 1, 1, 1, 2] 输出:[1, 2]提示: 链表长度在[0, 20000]范围内。链表元素在[0, 20000]范围内。进 阅读全文
posted @ 2020-05-01 23:17 梦醒潇湘 阅读(241) 评论(0) 推荐(0)
摘要: 题目: 编写一个程序,找到两个单链表相交的起始节点。 如下面的两个链表: 在节点 c1 开始相交。 示例 1: 输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Refere 阅读全文
posted @ 2020-05-01 23:10 梦醒潇湘 阅读(295) 评论(0) 推荐(0)
摘要: 1、如何判断两个链表(无环)相交? (1)判断第一个链表中的每个节点是否在第二个链表中,时间复杂度为O(length1*length2); (2)对第一个链表中的节点地址进行哈希,然后对第二个链表中的地址进行检查; (3)人为够环,将链表A的尾部节点指向链表B,再判断是否够环成功?从链表B的头节点往 阅读全文
posted @ 2020-05-01 22:51 梦醒潇湘 阅读(239) 评论(0) 推荐(0)
摘要: 题目: 反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。 说明:1 ≤ m ≤ n ≤ 链表长度。 示例: 输入: 1->2->3->4->5->NULL, m = 2, n = 4输出: 1->4->3->2->5->NULL 解答: 1 /** 2 * Definition for si 阅读全文
posted @ 2020-05-01 22:31 梦醒潇湘 阅读(122) 评论(0) 推荐(0)
摘要: 题目: 给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。 示例 1: 输入: 1->2->3->3->4->4->5输出: 1->2->5示例 2: 输入: 1->1->1->2->3输出: 2->3 解答: 1 /** 2 * Definition for s 阅读全文
posted @ 2020-05-01 22:28 梦醒潇湘 阅读(136) 评论(0) 推荐(0)
摘要: 题目: 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。 k 是一个正整数,它的值小于或等于链表的长度。 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。 示例: 给你这个链表:1->2->3->4->5 当 k = 2 时,应当返回: 2->1->4->3->5 阅读全文
posted @ 2020-05-01 22:21 梦醒潇湘 阅读(159) 评论(0) 推荐(0)
摘要: 题目: 合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。 示例: 输入:[ 1->4->5, 1->3->4, 2->6]输出: 1->1->2->3->4->4->5->6 解法: 方法一:顺序合并 可以想到一种最朴素的方法:用一个变量ans来维护以及合并的链表,第i次循环把 阅读全文
posted @ 2020-05-01 22:12 梦醒潇湘 阅读(194) 评论(0) 推荐(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 阅读全文
posted @ 2020-05-01 21:42 梦醒潇湘 阅读(212) 评论(0) 推荐(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 阅读全文
posted @ 2020-05-01 21:29 梦醒潇湘 阅读(213) 评论(0) 推荐(0)
摘要: 题目: 给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。 你可以假设除了数字 0 之外,这两个数字都不会以零开头。 进阶: 如果输入链表不能修改该如何处理?换句话说,你不能对列表中的节点进行翻转。 示例: 输入:(7 阅读全文
posted @ 2020-05-01 21:18 梦醒潇湘 阅读(135) 评论(0) 推荐(0)
摘要: 题目: 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字 0 之外,这两个数都不会以 0 开头。 示例: 输入:(2 -> 4 阅读全文
posted @ 2020-05-01 21:02 梦醒潇湘 阅读(184) 评论(0) 推荐(0)
摘要: 题目: 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 1->2->3->5.说明: 给定的 n 保证是有效的。 进阶: 你能尝试使用一趟扫描实现吗? 解答: 可以假设设定 阅读全文
posted @ 2020-05-01 20:50 梦醒潇湘 阅读(149) 评论(0) 推荐(0)
摘要: 题目: 给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。 你应当保留两个分区中每个节点的初始相对位置。 示例: 输入: head = 1->4->3->2->5->2, x = 3输出: 1->2->2->4->3->5 解法: 1 /** 2 阅读全文
posted @ 2020-05-01 20:37 梦醒潇湘 阅读(169) 评论(0) 推荐(0)
摘要: 题目: 给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。 请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。 示例 1: 输入: 1->2->3 阅读全文
posted @ 2020-05-01 20:30 梦醒潇湘 阅读(194) 评论(0) 推荐(0)
摘要: 题目: 在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。 示例 1: 输入: 4->2->1->3输出: 1->2->3->4 示例 2: 输入: -1->5->3->4->0输出: -1->0->3->4->5 解法: /** * Definition for singl 阅读全文
posted @ 2020-05-01 18:17 梦醒潇湘 阅读(181) 评论(0) 推荐(0)
摘要: 题目: 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例: 给定 1->2->3->4, 你应该返回 2->1->4->3. 解答: 1 /** 2 * Definition for singly-linked list 阅读全文
posted @ 2020-05-01 17:45 梦醒潇湘 阅读(111) 评论(0) 推荐(0)
摘要: 题目: 请判断一个链表是否为回文链表。 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true 解答: 方法一:将值复制到数组中后用双指针法。 方法二:递归。 方法三: 可以将链表的后半部分反转(修改链表结构),然后将前半部分和后半部分进行比较。 阅读全文
posted @ 2020-05-01 17:36 梦醒潇湘 阅读(111) 评论(0) 推荐(0)
摘要: 题目: 删除链表中等于给定值 val 的所有节点。 示例: 输入: 1->2->6->3->4->5->6, val = 6 输出: 1->2->3->4->5 解答: 1 /** 2 * Definition for singly-linked list. 3 * struct ListNode 阅读全文
posted @ 2020-05-01 17:21 梦醒潇湘 阅读(124) 评论(0) 推荐(0)
摘要: 题目: 给定一个链表,判断链表中是否有环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。 示例 1: 输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾 阅读全文
posted @ 2020-05-01 17:15 梦醒潇湘 阅读(176) 评论(0) 推荐(0)
摘要: 题目: 给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。 示例 1: 输入: 1->1->2 输出: 1->2 示例 2: 输入: 1->1->2->3->3 输出: 1->2->3 解答: (1)指定cur指针指向头部head; (2)当cur和cur->next的存在为循环结束条件 阅读全文
posted @ 2020-05-01 17:02 梦醒潇湘 阅读(163) 评论(0) 推荐(0)
摘要: 题目: 编写一个程序,找到两个单链表相交的起始节点。 如下面的两个链表: 在节点 c1 开始相交。 示例 1: 输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Refere 阅读全文
posted @ 2020-05-01 16:56 梦醒潇湘 阅读(348) 评论(0) 推荐(0)
摘要: 题目: 反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 解答: 1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 阅读全文
posted @ 2020-05-01 16:21 梦醒潇湘 阅读(141) 评论(0) 推荐(0)
摘要: 题目: 给定一个带有头结点 head 的非空单链表,返回链表的中间结点。 如果有两个中间结点,则返回第二个中间结点。 示例 1: 输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式:[3,4,5])返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。注意,我们返 阅读全文
posted @ 2020-05-01 16:12 梦醒潇湘 阅读(135) 评论(0) 推荐(0)
摘要: 题目: 输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。 示例: 给定一个链表: 1->2->3->4->5, 和 阅读全文
posted @ 2020-05-01 15:57 梦醒潇湘 阅读(144) 评论(0) 推荐(0)
摘要: 题目: 实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。 注意:本题相对原题稍作改动 示例: 输入: 1->2->3->4->5 和 k = 2输出: 4说明: 给定的 k 保证是有效的。 解答: (1)为了得到倒数第k个结点,很自然的想法是先走链表的尾端,再从尾端回溯k步。可是输入 阅读全文
posted @ 2020-05-01 15:41 梦醒潇湘 阅读(299) 评论(0) 推荐(0)
摘要: 题目: 给你一个单链表的引用结点 head。链表中每个结点的值不是 0 就是 1。已知此链表是一个整数数字的二进制表示形式。 请你返回该链表所表示数字的 十进制值 。 示例 1: 输入:head = [1,0,1]输出:5解释:二进制数 (101) 转化为十进制数 (5) 示例 2: 输入:head 阅读全文
posted @ 2020-05-01 15:15 梦醒潇湘 阅读(169) 评论(0) 推荐(0)
摘要: 题目: 请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。 现有一个链表 -- head = [4,5,1,9],它可以表示为: 示例 1: 输入: head = [4,5,1,9], node = 5输出: [4,1,9]解释: 给定你链表中值为 5 的第二 阅读全文
posted @ 2020-05-01 15:07 梦醒潇湘 阅读(120) 评论(0) 推荐(0)
摘要: 题目: 将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入:1->2->4, 1->3->4输出:1->1->2->3->4->4 解答: /** * Definition for singly-linked list. * struct Li 阅读全文
posted @ 2020-05-01 14:50 梦醒潇湘 阅读(184) 评论(0) 推荐(0)