链表练习
一道题目写一天
这个作者很懒,什么都没留下…
展开
-
反转链表 II
反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。说明:1 ≤ m ≤ n ≤ 链表长度。示例:输入: 1->2->3->4->5->NULL, m = 2, n = 4输出: 1->4->3->2->5->NULL来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/reverse-linked-list-ii著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处原创 2021-03-17 10:36:45 · 85 阅读 · 0 评论 -
复杂链表的复制
请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。示例 1:输入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]]输出:[[7,null],[13,0],[11,4],[10,2],[1,0]]示例 2:输入:head = [[1,1],[2,1]]输出:[[1,1],[2,1]]示例 3:输入:head =原创 2021-03-15 10:18:52 · 87 阅读 · 0 评论 -
扁平化多级双向链表
多级双向链表中,除了指向下一个节点和前一个节点指针之外,它还有一个子链表指针,可能指向单独的双向链表。这些子列表也可能会有一个或多个自己的子项,依此类推,生成多级数据结构,如下面的示例所示。给你位于列表第一级的头节点,请你扁平化列表,使所有结点出现在单级双链表中。示例 1:输入:head = [1,2,3,4,5,6,null,null,null,7,8,9,10,null,null,11,12]输出:[1,2,3,7,8,11,12,9,10,4,5,6]解释:输入的多级列表如下图所示:扁原创 2021-03-14 19:59:19 · 78 阅读 · 0 评论 -
分隔链表
给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。你应当 保留 两个分区中每个节点的初始相对位置。示例 1:输入:head = [1,4,3,2,5,2], x = 3输出:[1,2,2,4,3,5]示例 2:输入:head = [2,1], x = 2输出:[1,2]提示:链表中节点的数目在范围 [0, 200] 内-100 <= Node.val <= 100-200 <= x原创 2021-03-14 18:28:14 · 241 阅读 · 0 评论 -
合并K个升序链表
给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。示例 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->5->6示例 2:输入:lists = []输出:[]示例 3:输原创 2021-03-14 16:36:55 · 123 阅读 · 0 评论 -
圆桌问题
圆桌问题问题描述:圆桌上围坐着2n个人。其中n个人是好人,另外n个人是坏人。如果从第一个人开始数数,数到第m个人,则立即处死该人;然后从被处死的人之后开始数数,再将数到的第m个人处死……依此方法不断处死围坐在圆桌上的人。试问预先应如何安排这些好人与坏人的座位,能使得在处死n个人之后,圆桌上围坐的剩余的n个人全是好人。输入说明:输入:好人和坏人的人数n(<=32767)、步长m(<=50);输出说明:输出2n个大写字母,‘G’表示好人,‘B’表示坏人。输入范例:52 6输出范例:原创 2020-07-02 22:46:22 · 447 阅读 · 0 评论 -
求序列的交集(链表)
求序列的交集(链表)问题描述:使用带头结点的单链表编程:有两个序列,分别表示两个集合。求它们的交集并输出。输入说明:第一行输入序列A的信息:第一个整数n(0<=n<=100),表示共有n个元素,其后有n个整数,表示n个元素的数据第一行输入序列B的信息:第一个整数n(0<=n<=100),表示共有n个元素,其后有n个整数,表示n个元素的数据注:数据元素无序输出说明:输出交集的元素序列,输出格式见范例。如果交集为空,则输出“head–>tail”交集里的原创 2020-07-02 20:38:06 · 409 阅读 · 0 评论 -
求有序序列的交集(链表)
求有序序列的交集(链表)问题描述:使用带头结点的单链表编程:有两个有序序列,分别表示两个集合。求它们的交集并输出。注意:这里要利用到“有序”的特性。输入说明:第一行输入序列A的信息:第一个整数n(0<=n<=100),表示共有n个元素,其后有n个整数,表示n个元素的数据第一行输入序列B的信息:第一个整数n(0<=n<=100),表示共有n个元素,其后有n个整数,表示n个元素的数据注:两个序列输入时保证有序输出说明:输出交集的元素序列,输出格式见范例。如果交原创 2020-07-02 20:10:22 · 695 阅读 · 0 评论 -
悲剧文本
悲剧文本问题描述:你有一个破损的键盘。键盘上的所有键都可以正常工作,但有时Home键或者End键会自动按下。你并不知道键盘存在这一问题,而是专心地输入英文单词,甚至连显示器都没瞧一眼。当你看显示器时,展现在你面前的是一段悲剧的文本。你的任务是计算这段文本有几个单词。输入包含多组数据。每组数据占一行,包含不超过20000个英文字母、空格、字符“[”或者“]”(这多达20000个字符的数据会显示在一行,不用担心会换行)。其中字符“[”表示Home键(将光标定位到一行的开头),“]”表示End键(将光标定原创 2020-07-02 17:06:38 · 405 阅读 · 0 评论 -
集合的操作
集合的操作问题描述:输入A、B、C、D四个集合(集合中无重复元素,且元素值都大于0),分别存储在不带头结点的链表中。本程序先将四个集合执行以下操作:对A、B、C、D分别进行升序排序;(该功能已实现,见函数sort)。做A=A+B操作:先执行两个有序链表A和B的合并,并仍然保持有序,结果存储在A中,然后删除重复元素;(该功能已实现,见函数merge和purge)。做A=A-C操作:将C中出现的元素从A中删除;(该功能已实现,见函数subtract)。对D中出现的元素,逐一到A中查询:如果在A原创 2020-07-02 14:35:02 · 354 阅读 · 0 评论 -
删除链表第index个结点
删除链表第index个结点问题描述:输入若干(不超过100个)非负整数,创建一个不带头结点的单向链表。在输入一个位置index,从链表中删除第index个结点,输出结果链表。输入说明:首先输入若干非负整数,每个整数作为数据放入一个链表结点中,输入-1表示输入结束。然后输入若干组整数,每组一行,每行仅包含一个整数,表示需要删除的结点的位置index。如:输入1表示删除链表的第一个(最前面一个)结点。输出说明:对于每组输入,输出删除第index个结点之后的结果链表。输出的信息以head开头,以ta原创 2020-07-02 13:18:39 · 237 阅读 · 0 评论 -
一元多项式的加/减法运算
一元多项式的加/减法运算问题描述:假设2个稀疏一元多项式分别由带头结点的有序单链表A和B存储(指数项递增有序)。现要求设计一个算法,实现稀疏一元多项式的加减法计算。要求使用A和B的原存储空间(运算后B不再存在,A链表中保存结果多项式)。输入中的单链表的长度不得在计算算法中利用,仅作为建表使用。注意:加/减法计算后,如某一项的结果系数为0,则该项要从多项式链表中删除。输入说明:第一行:加/减法选择(0:加法 1:减法)第二行:一元多项式A的项数第三行:一元多项式A的各项的系数(系数之间以空格分原创 2020-07-01 20:57:28 · 1362 阅读 · 0 评论 -
在链表指定位置插入结点
在链表指定位置插入结点问题描述:输入若干(不超过100个)非负整数,创建一个不带头结点的单向链表。再输入一个位置index以及一个数据data,程序中首先创建一个新结点s,s的数据成员为data,然后调用函数insertNode将s插入到链表的指定位置index处,最后输出结果链表。输入说明:首先输入若干非负整数,每个整数作为数据放入一个链表结点中,输入-1表示输入结束。然后输入若干组整数,每组一行,每行包含两个整数,第一个表示需要插入位置index,第二个为新结点的数据。如:输入“1 5”表示在原创 2020-07-01 14:53:36 · 2200 阅读 · 0 评论 -
查找序列元素(链表)
查找序列元素(链表)问题描述:使用带头结点的单链表编程:一群学生排成一行,输入一个学号,请确定该学号学生所在的位置。输入说明:第一行输入学生信息:第一个整数n(0<=n<=100),表示共有n个学生,其后有n个整数,表示n个 学生的学号第二行及以后各行,每行输入一个整数,表示要查找的学生学号。输出说明:对于每个要查找的学号,输出一个整数,表示要查找学生的位置。如果共有n个学生,则位置序号为1~n。如果学生不存在,输出“no”,不包括双引号。每个输出占一行。输入范例原创 2020-07-01 13:20:31 · 559 阅读 · 0 评论