
#链表
answer_yym
且随疾风前行
展开
-
重排链表1423
1、描述给定一个单链表 L 的头节点 head ,单链表 L 表示为:L0 → L1 → … → Ln-1 → Ln请将其重新排列后变为:L0 → Ln → L1 → Ln-1 → L2 → Ln-2 → …不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/reorder-list著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。3、思路先找中点再逆置后边的原创 2021-09-30 16:51:24 · 162 阅读 · 0 评论 -
扁平化多级链表(孩纸串提上来,搞成一层)
文章目录1、描述2、关键字3、思路4、notes5、复杂度6、code1、描述多级双向链表中,除了指向下一个节点和前一个节点指针之外,它还有一个子链表指针,可能指向单独的双向链表。这些子列表也可能会有一个或多个自己的子项,依此类推,生成多级数据结构,如下面的示例所示。给你位于列表第一级的头节点,请你扁平化列表,使所有结点出现在单级双链表中。示例 1:输入:head = [1,2,3,4,5,6,null,null,null,7,8,9,10,null,null,11,12]输出:[1,2,3,7原创 2021-09-24 20:21:09 · 191 阅读 · 0 评论 -
两个链表实现加法
文章目录1、描述2、关键字3、思路4、notes5、复杂度6、code1、描述给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。来源:力扣(LeetCode)链接:著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。2、关键字链表,相加3、思路就是直接相加,搞一个进位权值power4、not原创 2021-09-08 16:03:19 · 162 阅读 · 0 评论 -
分割链表,按给定值,快排第一步
文章目录1、描述2、关键字3、思路4、notes5、复杂度6、code1、描述给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。你不需要 保留 每个分区中各节点的初始相对位置。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/partition-list-lcci著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。2、关键字分割链表,给定一原创 2021-09-02 21:00:11 · 83 阅读 · 0 评论 -
合并2个有序链表 & K个有序链表,
文章目录1、描述2、关键字3、思路4、notes5、复杂度6、code1、描述给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。示例 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]将它们合并到一个有序链表中得到。1->1->2->3->4->4-原创 2021-09-01 15:13:28 · 185 阅读 · 0 评论 -
两两交换链表中的值
@[tco]1、描述给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例 1:输入:head = [1,2,3,4]输出:[2,1,4,3]来源:力扣(LeetCode)链接:著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。2、关键字链表,交换相邻的节点,原地修改3、思路使用指针,首先保存需要交换的两个节点的后一个节点。然后保存需要交换的第一个节点。然后使用3行代码交换。之后再把dum原创 2021-08-26 11:15:30 · 263 阅读 · 0 评论 -
LRU算法实现
1、描述实现一个lru缓存机制算法。查询复杂度O(1),删除添加复杂度也是O(1)题目描述2、关键字lru3、思路使用一个hash表,把当前的键,和键+值,搞成一个哈希映射表,然后通过链表的方式把历史数据存起来。使用头插法,维护最近使用的元素在链表头。4、notes把链表,双向链表的定义分离,代码结构清晰。5、复杂度时间O(1)空间O(1)6、code struct Node{ // 直接双向链表 int key; int val;原创 2021-08-04 14:08:37 · 220 阅读 · 0 评论 -
移除链表元素
文章目录1、描述2、关键字3、思路4、notes5、复杂度6、code1、描述给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。2、关键字链表,去除指定值的元素3、思路while循环一次遍历直接删除。使用一个dmp指向head头节点。4、notes内存越界,每次判断是否相等时候,都判断一次是否存在5、复杂度时间(N)空间:O(1)6、code/** * Definition for sin原创 2021-06-05 10:17:00 · 104 阅读 · 0 评论 -
复杂链表的拷贝
文章目录1、描述2、关键字3、思路4、notes5、复杂度6、code1、描述请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。来源:力扣(LeetCode)链接著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。2、关键字链表,赋值,多一个随机访问的指针,3、思路构造一个哈希表,键是原始链表的每个节点,值是新开辟空间创建出来的节点,遍原创 2021-05-23 21:36:54 · 108 阅读 · 0 评论 -
链表去重002
文章目录1、描述2、关键字3、思路4、notes5、复杂度6、code1、描述存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中 没有重复出现 的数字。返回同样按升序排列的结果链表。链接著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。2、关键字链表、去重、重复的一个都不留,3、思路遍历,如果相等 就临时记录后面两个值,便于去重,如果不等就直接往后移动就好了4、notes1、链表使用之前先判断非空5原创 2021-03-25 17:42:23 · 124 阅读 · 0 评论 -
翻转链表中的一段
1、描述92、给你单链表的头节点 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。来源:力扣(LeetCode)链接著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。2、关键字链表、翻转、从中间指定位置,3、思路之前做过类似的:迭代法:3步:1、保存当前节点的后一个节点,2、后项指前项3、前进:左边赋值成当前节点,当前节点赋值成第一步中保存的后一原创 2021-03-18 13:34:03 · 209 阅读 · 0 评论 -
删除链表的倒数第n个元素
1、描述19、给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。进阶:你能尝试使用一趟扫描实现吗?2、关键字链表、到数n3、思路双指针4、note链表常用技巧设置一个哑巴前置头节点,语法: ListNode* dumpNode=new ListNode(0,head); // 构造哑节点特殊情况:链表为空!和链表长度不到 n5、复杂度:时间:O(N)空间:O(1)6、code/** * Definition for singly-linked list.原创 2021-03-12 22:29:05 · 168 阅读 · 0 评论 -
单链表取倒数第n个元素002
1、描述给出一个单链表,让取出倒数第n个元素,2、思路思路1:使用双指针,思路1.1 :使用一个滑动窗口,然后往后移动,当滑动窗口的右边界到链表终点时候,滑动窗口的第一个元素就是结果了!,不过滑动窗口的值要更新,操作复杂。思路2:使用一个vector把整个链表的元素存起来,然后根据随机访问特性,根据下标把元素给取出来。此时的空间复杂度是:O(m),m是链表的长度优化:vector的空间复杂度:可以只开一个数组长度为n,然后循环存取,当把单链表最后一个元素存进来的时候,数组的当前元素的下一个元素原创 2021-01-09 11:18:07 · 560 阅读 · 0 评论 -
判断链表有没有环 + 如果有返回入环节点。002
1、描述141给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。进阶:你能用 O(1)(即,常量)内存解决此问题吗?来源:力扣(LeetCode)链接:htt原创 2020-10-09 19:53:17 · 323 阅读 · 0 评论 -
移除链表重复节点001
1、描述编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。示例1:输入:[1, 2, 3, 3, 2, 1]输出:[1, 2, 3]2、关键字链表、去重3、思路1、把节点存到set容器中去重(不好)2、把节点的val值放到set中,统计set中node->next->val的个数如果等于1就说明当前节点的后边的节点已经存在了,跳过就好了4、note1、先插入当前节点,再统计后一个节点,2、用set存val的值就可以达到去重的效果了,不必存放节点5、复杂度时间原创 2020-09-27 10:06:32 · 177 阅读 · 0 评论 -
两个链表的第一个公共节点001
1、描述52输入两个链表,找出它们的第一个公共节点。2、关键字链表,找相同3、思路注意:是第一个公共子节点:相交后面的都相等了。而不是节点的val值相等的节点,题目链接1、双指针:两个走过自己的路,再走对方的路,如果有相同节点,则会两个都走了L1 + L2 - C的节点个数时候相遇,如果没有相同节点:1、如果两个节点个数相同,会在第一次各自都走到最后时候返回NULL,2、如果两个节点个数不同,则会两个都走完两个的时候结束,返回NULL.2、set查找,先把第一个链表存起来,然后再遍历第二个原创 2020-09-25 11:22:26 · 87 阅读 · 0 评论 -
删除链表中的一个节点002单参数
1、描述237请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为 要被删除的节点 。现有一个链表 – head = [4,5,1,9],它可以表示为:来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/delete-node-in-a-linked-list著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处0。2、关键字链表,函数参数只有一个待删节点3、思路删除节点,都是前一个节点指向当前节点的原创 2020-09-24 22:28:44 · 113 阅读 · 0 评论 -
反转链表 & 初始化 & 只转m和n之间
1、描述反转一个单向链表2、关键字反转3、思路3步迭代递归栈4、notes3步迭代1、保存后方 tem=cur->next2、反指前方 cur->next=pre3、迭代前进 pre=cur; cur=tem;5、复杂度时间:O(N)空间:O(1)6、code/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next;原创 2020-09-23 22:06:09 · 88 阅读 · 0 评论 -
回文链表002
1、描述234请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true2、关键字链表、回文3、思路1、前后对应,栈把后边一半存起来,队列把前边一半存起来,然后比较2、分奇偶情况4、notes1、while(真假?)if(真假?)2、如果是奇数,链表在从前一半到后一半过渡时,中间需要踩空一步3、解析说,转存到数组中,可以把空间复杂度变成O(1)4、head指针到最后,没回来。!原创 2020-09-23 21:59:19 · 274 阅读 · 0 评论 -
旋转链表 后移动K位置
1、描述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 步: 4->5->1->2->3->NULL示例 2:输入: 0->1->2原创 2020-09-22 12:56:49 · 131 阅读 · 1 评论 -
删除链表的中间节点001
1、描述实现一种算法,删除单向链表中间的某个节点(即不是第一个或最后一个节点),假定你只能访问该节点。示例:输入:单向链表a->b->c->d->e->f中的节点c结果:不返回任何数据,但该链表变为a->b->d->e->f来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/delete-middle-node-lcci著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。2原创 2020-09-22 10:04:47 · 143 阅读 · 0 评论 -
链表输出到数第k个节点001
1、描述输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/lian-biao-zhong-dao-shu-di-kge-jie-dian-lcof著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。2原创 2020-09-20 20:30:48 · 176 阅读 · 0 评论 -
链表取中间值
文章目录1、描述2 思路 解法一3、notes:4、复杂度5、code2、解法二 思路:3、notes:4、复杂度5、code:1、描述给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。示例 1:输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式:[3,4,5])来源:力扣(LeetCode)链接:著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。2 思路 解法一 用一个计数器统计链表长度,然原创 2021-08-18 15:41:49 · 377 阅读 · 0 评论