链表
xiao1guaishou
这个作者很懒,什么都没留下…
展开
-
LeetCode 21 合并两个有序链表
题目将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4思路新建一个头节点,表示归并后链表的头,创建一个工作指针P,使其一直指向归并后链表的尾部比较L1->val 和 L2->val的大小,并...原创 2019-01-05 11:09:19 · 77 阅读 · 0 评论 -
LeetCode 142. 环形链表 II
题目:给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。说明:不允许修改给定的链表。示例 1:输入:head = [3,2,0,-4], pos = 1输出:tail connects to node index...原创 2019-01-18 15:13:48 · 76 阅读 · 0 评论 -
LeetCode 86. 分隔链表
题目给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。你应当保留两个分区中每个节点的初始相对位置。示例:输入: head = 1->4->3->2->5->2, x = 3输出: 1->2->2->4->3->5解题思路1.找出第1个大于或等于给定值的节点first,...原创 2019-01-18 16:01:13 · 107 阅读 · 0 评论 -
LeetCode 61. 旋转链表
题目:给定一个链表,旋转链表,将链表每个节点向右移动 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 步:原创 2019-01-18 17:05:29 · 132 阅读 · 0 评论 -
LeetCode 24. 两两交换链表中的节点
题目:给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。示例:给定 1->2->3->4, 你应该返回 2->1->4->3.说明:你的算法只能使用常数的额外空间。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。解题思路新建odd,even指针,分别指向奇数个和偶数个节点,然后就不断交换两节点,并不断更新两指针。...原创 2019-01-18 17:34:57 · 81 阅读 · 0 评论 -
LeetCode 92. 反转链表 II
题目:反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。说明:1 ≤ m ≤ n ≤ 链表长度。示例:输入: 1->2->3->4->5->NULL, m = 2, n = 4输出: 1->4->3->2->5->NULL解题思路:只用将m到n之间的链表截取下来反转,再成链即可 ListNode* rev(...原创 2019-01-14 15:53:37 · 96 阅读 · 0 评论 -
LeetCode 19. 删除链表的倒数第N个节点
题目:给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。进阶:你能尝试使用一趟扫描实现吗?解题思路:由于用一趟扫描,采用双指针法,一个指针先移动n个节点距离,...原创 2019-01-15 14:17:09 · 75 阅读 · 0 评论 -
LeetCode 817. 链表组件
题目:给定一个链表(链表结点包含一个整型值)的头结点 head。同时给定列表 G,该列表是上述链表中整型值的一个子集。返回列表 G 中组件的个数,这里对组件的定义为:链表中一段最长连续结点的值(该值必须在列表 G 中)构成的集合。示例 1:输入:head: 0->1->2->3G = [0, 1, 3]输出: 2解释:链表中,0 和 1 是相连接的,且 G...原创 2019-01-15 15:56:10 · 237 阅读 · 0 评论 -
LeetCode 141. 环形链表
题目:给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。解题思路:双指针法:利用两个指针,fast指针一次走两步,slow指针一次走一步,fast == slow return truefast == nullptr || fast...原创 2019-01-09 21:13:29 · 83 阅读 · 0 评论 -
LeetCode 234. 回文链表
题目:请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?解题思路:1.现根据快慢指针找出链表中点,然后将中点右端的链表反转,在比较两链表是否相等。若全部相等,则返回true,否则返回false ...原创 2019-01-13 14:33:36 · 107 阅读 · 0 评论 -
LeetCode 876. 链表的中间结点
题目:给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。示例 1:输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式:[3,4,5])返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。注意,我们返回了一个 ListNode 类型的对象 ans,这样:ans.val = 3, ans....原创 2019-01-13 10:50:28 · 141 阅读 · 0 评论 -
LeetCode 237. 删除链表中的节点
题目:请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。现有一个链表 – head = [4,5,1,9],它可以表示为:4 -> 5 -> 1 -> 9示例 1:输入: head = [4,5,1,9], node = 5输出: [4,1,9]解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表...原创 2019-01-13 10:26:33 · 76 阅读 · 0 评论 -
LeetCode 160. 相交链表
题目:编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表:在节点 c1 开始相交。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值为 8 (...原创 2019-01-11 10:57:00 · 75 阅读 · 0 评论 -
LeetCode 203. 移除链表元素
题目:删除链表中等于给定值 val 的所有节点。示例:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5-解题思路一:双指针法,遇到相同值的节点就删除代码实现(C++)ListNode* removeEl原创 2019-01-11 11:27:09 · 102 阅读 · 0 评论 -
LeetCode 206. 反转链表
题目:反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL解题思路1(递归)递归式 ListNode* reverseList(ListNode* head) { if(head == nullptr || head->next ==...原创 2019-01-11 15:58:15 · 113 阅读 · 0 评论 -
LeetCode 445. 两数相加 II
题目:给定两个非空链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储单个数字。将这两数相加会返回一个新的链表。你可以假设除了数字 0 之外,这两个数字都不会以零开头。进阶:如果输入链表不能修改该如何处理?换句话说,你不能对列表中的节点进行翻转。示例:输入: (7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)输出...原创 2019-01-17 13:49:52 · 142 阅读 · 0 评论 -
LeetCode
题目:给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。示例 1:输入: 1->2->3->4->5->NULL输出: 1->3->5-&g...原创 2019-01-17 14:17:28 · 137 阅读 · 0 评论 -
LeetCode 147. 对链表进行插入排序
题目:插入排序的动画演示如上。从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示)。每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将其插入到已排好序的链表中。插入排序算法:插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。重复直到所有输入数据...原创 2019-01-17 16:00:16 · 121 阅读 · 0 评论 -
LeetCode 82. 删除排序链表中的重复元素 II
题目:给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。示例 1:输入: 1->2->3->3->4->4->5输出: 1->2->5示例 2:输入: 1->1->1->2->3输出: 2->3解题思路只用判断链表中是否有相同值的节点,有就全部跳过。代码实现(...原创 2019-01-17 17:21:23 · 103 阅读 · 2 评论 -
LeetCode 83. 删除排序链表中的重复元素
题目:给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例 1:输入: 1->1->2输出: 1->2示例 2:输入: 1->1->2->3->3输出: 1->2->3解题思路方法一:由于是有序链表,利用两个工作指针指向相邻的元素,并不断比较两个节原创 2019-01-07 16:41:54 · 81 阅读 · 0 评论 -
LeetCode 725. 分隔链表
题目:给定一个头结点为 root 的链表, 编写一个函数以将链表分隔为 k 个连续的部分。每部分的长度应该尽可能的相等: 任意两部分的长度差距不能超过 1,也就是说可能有些部分为 null。这k个部分应该按照在链表中出现的顺序进行输出,并且排在前面的部分的长度应该大于或等于后面的长度。返回一个符合上述规则的链表的列表。举例: 1->2->3->4, k = 5 //...原创 2019-01-16 10:03:05 · 151 阅读 · 0 评论