LeetCode链表
文章平均质量分 57
LeetCode链表
overlordmax
这个作者很懒,什么都没留下…
展开
-
92. 反转链表 II
1.题目描述反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。说明:1 ≤ m ≤ n ≤ 链表长度。示例:输入: 1->2->3->4->5->NULL, m = 2, n = 4输出: 1->4->3->2->5->NULL2.思路(双指针)1.设置两个指针cur和pre2.cur和pre移动到位置m,也就是翻转链表的起始位置3.指针tail为翻转后的尾节点,con指针为第m个节点的前一个节点,此结点是翻转后链表的头部原创 2021-01-31 20:17:14 · 100 阅读 · 0 评论 -
25. K 个一组翻转链表
1.题目描述给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。示例:给你这个链表:1->2->3->4->5当 k = 2 时,应当返回: 2->1->4->3->5当 k = 3 时,应当返回: 3->2->1->4->5说明:你的算法只能使用常数的额外空间。你不能只是单纯的改变节点内部的原创 2021-01-09 19:00:19 · 200 阅读 · 0 评论 -
237. 删除链表中的节点
1.题目描述请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为 要被删除的节点 。现有一个链表 – head = [4,5,1,9],它可以表示为:2.思路方法:与下一个节点交换从链表里删除一个节点 node 的最常见方法是修改之前节点的 next 指针,使其指向之后的节点。因为,我们无法访问我们想要删除的节点之前的节点,我们始终不能修改该节点的 next 指针。但是,我们可以把想要删除的节点的值替换为它后面节点中的值,然后删除它之后的节点。因为我们知道要删原创 2020-10-19 11:39:55 · 124 阅读 · 0 评论 -
单链表的选择排序
1.题目描述给定一个无序单链表,实现单链表的选择排序(按升序排序)。示例12.思路节点p为已排序链表,节点q为未排序区链表,每次循环找到未排序区的最小值接到已排序区后面。3.代码/** * struct ListNode { * int val; * struct ListNode *next; * }; */class Solution {public: /** * * @param head ListNode类 the head node原创 2020-10-10 16:39:35 · 1373 阅读 · 0 评论 -
面试题 02.05. 链表求和
1.题目描述给定两个用链表表示的整数,每个节点包含一个数位。这些数位是反向存放的,也就是个位排在链表首部。编写函数对这两个整数求和,并用链表形式返回结果。示例:2.思路1.先对应位求和(位数少的数对应位不存在就用0加)2.加上上一次的进位3.得到当前位4.记录进位当位数大的数遍历完(遍历完较长的链表)且进位也为0的时候就可以停止了3.代码/** * Definition for singly-linked list. * struct ListNode { * int原创 2020-09-25 19:42:44 · 80 阅读 · 0 评论 -
146. LRU缓存机制
1.题目描述运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果关键字 (key) 存在于缓存中,则获取关键字的值(总是正数),否则返回 -1。写入数据 put(key, value) - 如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字/值」。当缓存容量达到上限时,它应该在写入新数据之前删除最久未使用的数据值,从而为新的数据值留出空间。进阶:你是否原创 2020-09-09 21:59:26 · 109 阅读 · 0 评论 -
328. 奇偶链表
328. 奇偶链表1.题目描述给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。示例 1:示例 2:说明:1.应当保持奇数节点和偶数节点的相对顺序。2.链表的第一个节点视为奇数...原创 2020-04-06 20:52:49 · 185 阅读 · 0 评论 -
725. 分隔链表
725. 分隔链表1.题目描述给定一个头结点为 root 的链表, 编写一个函数以将链表分隔为 k 个连续的部分。每部分的长度应该尽可能的相等: 任意两部分的长度差距不能超过 1,也就是说可能有些部分为 null。这k个部分应该按照在链表中出现的顺序进行输出,并且排在前面的部分的长度应该大于或等于后面的长度。返回一个符合上述规则的链表的列表。举例: 1->2->3->...原创 2020-04-06 20:38:10 · 181 阅读 · 0 评论 -
23. 合并K个排序链表
23. 合并K个排序链表1.题目描述合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例:2.方法1(优先队列)把K个链表的头节点放到优先队列里面,则优先队列出队的是当前最小元素,接到结果链表里面,如果最小元素的下一个节点非空,则把该节点入队,重复这个过程,当队列为空时,则合并完毕。3.代码/** * Definition for singly-linked...原创 2020-04-01 22:56:33 · 111 阅读 · 0 评论 -
2. 两数相加
2. 两数相加1.题目描述给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:2.思路 就像在纸上计算两个数字的和那样,我们首先从最低有效位也就是列表 l1 和 l2 的表头...原创 2020-03-30 12:28:04 · 88 阅读 · 0 评论 -
148. 排序链表
148. 排序链表1.题目描述在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。示例 1:示例 2:2.思路归并排序:指的是将两个已经排序的序列合并成一个序列的操作,因此采用分治法解决该问题。分治法关键有两点:1.分割:把当前序列平均分割成两半;2.合并:在保持元素顺序的同时将上一步得到的子序列合并到一起;bottom-to-up 的归并思路是这样的...原创 2020-03-01 22:03:36 · 91 阅读 · 0 评论 -
146. LRU缓存机制
146. LRU缓存机制1.题目描述运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。写入数据 put(key, value) - 如果密钥不存在,则写入其数据值。当缓存容量达到上限时,它...原创 2020-03-01 20:36:36 · 141 阅读 · 0 评论 -
234. 回文链表
234. 回文链表1.题目描述请判断一个链表是否为回文链表。示例 1:示例 2:进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?2.思路(1)利用快慢指针,快指针一次走两步,慢指针一次走一步,找到链表的中间节点。如果链表长度为奇数,则中间节点归为前一半的链表。(2)反转后一半链表。(3)比较两部分链表,因为如果链表的长度为奇数时,前一半长度大于后一半,...原创 2020-03-01 15:38:55 · 94 阅读 · 0 评论 -
19. 删除链表的倒数第N个节点
19. 删除链表的倒数第N个节点1.题目描述给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:说明:给定的 n 保证是有效的。进阶:你能尝试使用一趟扫描实现吗?2.思路 设定一个哨兵节点dummyHead指向链表头节点,两个指针变量first,second赋值为dummyHead,第一个节点first先走n+1步,然后两个指针一起走,直到第二个指针到达链...原创 2020-02-29 22:40:23 · 79 阅读 · 0 评论 -
83. 删除排序链表中的重复元素
83. 删除排序链表中的重复元素1.题目描述给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例 1:示例 2:2.思路逐个判断链表的当前节点和下一节点是否相等,如果相等,则把当前节点指向下下节点,否则当前节点后移。3.代码/** * Definition for singly-linked list. * struct ListNode { * i...原创 2020-02-29 11:20:51 · 88 阅读 · 0 评论 -
61. 旋转链表
61. 旋转链表1.题目描述给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。示例 1:示例 2:2.思路1.找到旧的尾部并将其与链表头相连 old_tail.next = head,整个链表闭合成环,同时计算出链表的长度 n。2.找到新的尾部,第 (n - k % n - 1) 个节点 ,新的链表头是第 (n - k % n) 个节点。3.断开环...原创 2020-01-18 23:20:16 · 119 阅读 · 0 评论 -
24. 两两交换链表中的节点
24. 两两交换链表中的节点1.题目描述给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例:2.方法1(递归)递归的三步骤:1.返回值2.调用单元做了什么3.终止条件在本题中:1.返回值:交换完成的子链表。2.调用单元:设需要交换的两个点为head和next,head连接后面交换完成的子链表,next...原创 2020-01-14 22:04:27 · 114 阅读 · 0 评论 -
21. 合并两个有序链表
21. 合并两个有序链表题目描述将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:思路首先,我们设定一个哨兵节点 “dummyHead” ,这可以在最后让我们比较容易地返回合并后的链表。我们维护一个 prev 指针,我们需要做的是调整它的 next 指针。然后,我们重复以下过程,直到 l1 或者 l2 指向了 null :如果 l1 当前...原创 2020-01-08 23:35:14 · 73 阅读 · 0 评论 -
19. 删除链表的倒数第N个节点
19. 删除链表的倒数第N个节点题目描述给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:说明:给定的 n 保证是有效的。思路 双指针一次遍历使用两个指针而不是一个指针。第一个指针从列表的开头向前移动 n+1 步,而第二个指针将从列表的开头出发。现在,这两个指针被 n 个结点分开。我们通过同时移动两个指针向前来保持这个恒定的间隔,直到第一个指针到达最后一个结点...原创 2020-01-08 23:05:33 · 75 阅读 · 0 评论 -
2. 两数相加
2. 两数相加题目描述给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:思路就像你在纸上计算两个数字的和那样,我们首先从最低有效位也就是列表 l1 和 l2 的表头开始相...原创 2020-01-08 22:30:29 · 116 阅读 · 0 评论