leetcode链表系列
leetcode链表系列
谜底广告歌
我迷恋的时光自天空倾倒
展开
-
leetcode143 重排链表
这道题相当于三题合一,先通过快慢指针找到链表的中间节点,然后反转中间节点到末尾的这一段链表,再然后遍历,将每个节点的next指向合适的位置即可。不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。原创 2024-04-15 08:45:58 · 159 阅读 · 0 评论 -
链表系列参数构造完整代码
【代码】链表系列参数构造完整代码。原创 2023-10-18 21:02:43 · 100 阅读 · 0 评论 -
leetcode237 删除链表中的节点
在给定节点 node的情况下,可以通过修改 node的 next 指针的指向,删除node 的下一个节点。但是题目要求删除node,为了达到删除node 的效果,只要在删除节点之前,将node 的节点值修改为node.next 的节点值即可。解释:指定链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9。给你一个需要删除的节点 node。有一个单链表的 head,我们想删除它其中的一个节点 node。输入:head = [4,5,1,9], node = 5。原创 2023-09-20 20:31:34 · 166 阅读 · 0 评论 -
leetcode92 反转链表II
这道题不太简单,分为两种方法,先说不好理解的那种方法,主要是官方题解中的第二种方法(一次遍历穿针引线头插法),注意这种反转和之前遇到过的都不一样,写的时候很容易出错(在画图的前提下,易错点都在下面代码里了)第二种方法是在之前反转链表的基础上改进,稍微好理解一点,直接调用之前的反转链表的方法(当然这个方法也可以改成不需要返回值)输入:head = [1,2,3,4,5], left = 2, right = 4。输出:[1,4,3,2,5]原创 2023-09-20 15:49:22 · 169 阅读 · 0 评论 -
leetcode86 分割链表
给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。首先看这道题的时候,那个示例半天没看明白,它要的是比较之后还是相对序列,并不是整体都排序了。然后直接开两个链表来做就可以。输入:head = [1,4,3,2,5,2], x = 3。你应当 保留 两个分区中每个节点的初始相对位置。输出:[1,2,2,4,3,5]原创 2023-09-20 08:15:35 · 231 阅读 · 0 评论 -
leetcode61 旋转链表
这道题属实不好想:需要计算出链表的长度,然后在k > n的时候,需要k%n才知道右移几位;然后用n减去上面的那个取模后的值,表示从尾节点开始,还需要走几步;然后走上面的偏移量,就达到了新链表开始的前一个节点。将这个节点的next赋值成nil后,相当于断开了后面的环,此时拿到了预期结果。给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。输入:head = [1,2,3,4,5], k = 2。输出:[4,5,1,2,3]原创 2023-09-19 23:00:18 · 329 阅读 · 0 评论 -
leetcode83 删除排序链表中的重复元素
给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次。返回 已排序的链表。这道题和因为只删一个,直接用cur来比较就行,不需要next.next了。输入:head = [1,1,2,3,3]输出:[1,2,3]原创 2023-09-19 22:24:51 · 34 阅读 · 0 评论 -
leetcode82 删除排序链表中的重复元素II
这道题要将重复的元素都删除了,这就意味着头节点也可能会被删掉,因此就需要dummy,同时来进行判断的是.next和 .next.next。给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字。返回 已排序的链表。输入:head = [1,2,3,3,4,4,5]输出:[1,2,5]原创 2023-09-19 21:55:30 · 56 阅读 · 0 评论 -
leetcode25 K个一组反转链表
k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。大致的思路是遍历到符合的位置后,调用反转链表改进后的代码,然后在递归处理后面的部分。给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。输入:head = [1,2,3,4,5], k = 2。输出:[2,1,4,3,5]原创 2023-09-19 19:27:33 · 204 阅读 · 0 评论 -
leetcode234 回文链表
给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true;否则,返回 false。先快慢指针找到中间节点,然后反转后半个链表,再同时比较两个链表。输入:head = [1,2,2,1]原创 2023-09-19 16:54:20 · 98 阅读 · 0 评论 -
leetcode23 合并K个有序列表
根据二维数组的长度,从中间开始分成两部分,不断递归,然后分别调用两两合并的那个函数。输入:lists = [[1,4,5],[1,3,4],[2,6]]请你将所有链表合并到一个升序链表中,返回合并后的链表。给你一个链表数组,每个链表都已经按升序排列。输出:[1,1,2,3,4,4,5,6]将它们合并到一个有序链表中得到。原创 2023-09-19 15:35:36 · 181 阅读 · 0 评论 -
leetcode2 两数相加
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。这道题是模拟法,新起一个链表来存,不断循环、相加、进位来计算,最后若还有进位就再补一位。输入:l1 = [2,4,3], l2 = [5,6,4]请你将两个数相加,并以相同形式返回一个表示和的链表。解释:342 + 465 = 807.输出:[7,0,8]原创 2023-09-19 15:21:49 · 156 阅读 · 0 评论 -
leetcode148 排序链表
在实际应用中,大概率会先转成数组排序后,再转成链表。对于本题而言,需要递归找到链表的中间节点后,调用之前的合并两个链表的方法。给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表。输入:head = [4,2,1,3]输出:[1,2,3,4]原创 2023-09-19 15:04:46 · 49 阅读 · 0 评论 -
leetcode876 链表的中间节点
解释:该链表有两个中间结点,值分别为 3 和 4 ,返回第二个结点。给你单链表的头结点 head ,请你找出并返回链表的中间结点。输入:head = [1,2,3,4,5,6]快慢指针,直接上代码,调试不清楚就画个图捋捋。如果有两个中间结点,则返回第二个中间结点。输入:head = [1,2,3,4,5]解释:链表只有一个中间结点,值为 3。输出:[3,4,5]输出:[4,5,6]原创 2023-09-19 14:13:02 · 254 阅读 · 0 评论 -
链表的奇偶重排 - 牛客
首先这道题定义odd指针(奇数的)指向第一个节点(head),even指针指向第二个节点,然后链表重排嘛,另odd指向even的下一个节点…给定单链表,要求将下标为奇数的节点连接在一起,偶数的节点连接在一起,然后两个再连起来。开两个新链表然后再合起来的做法肯定不是太好的办法。链表的问题还是需要动手画一张图。输入:{1,2,3,4,5,6}输出:{1,3,5,2,4,6}原创 2023-08-29 08:22:44 · 81 阅读 · 0 评论 -
leetcode 146 LRU缓存
这道题在面试中被问到的概率较大,因为既考察了链表,又考察了哈希表,又有一定的综合能力,比较容易扩展。在本题中,实现LRU缓存是用哈希表+双向链表来实现。注意双向链表一般会加上头尾的伪结点来方便定位。请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。原创 2023-04-08 14:21:07 · 59 阅读 · 0 评论 -
leetcode链表系列汇总
首先总结一下,关于链表,有两个值得总结的地方:1.首先是关于哑节点的问题,原理就不再赘述了,但要注意的是,不是所有的题目都需要哑节点。什么情况需要呢,比如对一个链表进行处理,返回处理后的链表(移除元素、两两交换节点等);什么情况不需要呢,比如要求两条链表的相交节点,这种就不需要了;2.其次就是循环处理的时候,是cur!= nil 还是cur.Next!= nil等问题,这个建议在写代码的时候,不要偷懒,根据测试用例画个图,自行推导一遍;原创 2023-02-04 19:11:45 · 555 阅读 · 0 评论 -
leetcode21 合并两个有序链表
题目:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]解析:需要维护一个头结点(哨兵节点),每次指向两个链表中较小的那个值,直到有一个链表没有值了,将另一个的都追加到头结点的后面func mergeTwoLists(l1 *ListNode, l2 *ListNode) *ListNode { prehead := &L原创 2022-02-03 10:36:10 · 850 阅读 · 0 评论 -
leetcode142 环形链表II 141 环形链表
给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。输入:head = [3,2,0,-4], pos = 1输出:返回索引为 1 的链表节点解释:链表中有一个环,其尾部连接到第二个节点。和环形链表基础版一样,先是用快慢指针找到相遇的位置,再从此位置开始,slow还是每步走1,head从头节点开始也每步走1,再次相遇的位置就是入口(还是,想不明白就画图)...原创 2022-07-07 09:12:55 · 161 阅读 · 0 评论 -
leetcode0207 链表相交
给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Intersected at ‘8’解释:相交节点的值为 8 (注意,如果两个链表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,0,1,8,4原创 2022-07-05 09:15:13 · 95 阅读 · 0 评论 -
leetcode19 删除链表的倒数第N个节点
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]用快慢指针,快指针先走n步,然后快慢指针再同时走,快指针走到结尾的时候,慢指针走到合适的位置。需要注意的是,比较大小的那个 < 还是...原创 2022-07-04 09:38:17 · 108 阅读 · 0 评论 -
leetcode24 两两交换链表中的节点
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。输入:head = [1,2,3,4]输出:[2,1,4,3]首先链表类的相关题目,一定要想到用头节点,会比较方便;然后主要就是两两交换,交换的时候想不明白可以画图,然后写代码的时候就跟着画图的步骤一步一步写就行正确的代码:但是下面这样写就会超时还没想明白为啥...原创 2022-06-22 09:58:59 · 130 阅读 · 0 评论 -
leetcode206反转链表 easy
注意这道题是要翻转整个链表,而不是两两交换链表的节点;所以在改变节点指向下个指针的顺序后,像一个滑动窗口一样一直向前赋值移动,直到结束。给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。输入:head = [1,2,3,4,5]输出:[5,4,3,2,1]原创 2022-04-14 09:27:26 · 540 阅读 · 0 评论 -
leetcode203 移除链表元素 easy
这个部分是链表的基础,对于链表,首先leetcode上已经给我们在开头定义好了链表的结构并注释掉了,是下面这个样子的结构: type struct ListNode { Val int Next *ListNode}主要就是定义了链表的值以及下一个节点。题目给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点示例输入:head = [1,2,6,3,4,5,6], val = 6输出:[原创 2022-04-14 09:00:33 · 220 阅读 · 0 评论