链表
傻傻24再战
千里之行,始于足下。
展开
-
递归求链表的最大值、节点数、平均值
【代码】递归求链表的最大值、节点数、平均值。原创 2023-04-01 22:35:02 · 496 阅读 · 0 评论 -
合并两个带头结点的循环链表La和Lb(效率尽可能高)
经过几天的学习,了解到了一种带尾节点的数据结构,用于合并两链表显然效率更高,只需将La链的尾节点指向Lb链的第一个数据节点,再将Lb链的尾结点指向La链的链头结点,更新La链的尾结点为Lb链的尾结点即可,如此,便可减少遍历链表进行插入的步骤,显然效率更高。下面是我的两个方法的原码,请读者批评指正,如果有更好的方法,欢迎评论区留言,希望我们能共同进步~~~改进后的代码:La、Lb使用带尾结点指针的循环链表,将La的链的尾结点指针指向Lb链的第一个数据结点,然后将Lb链的尾结点指针指向La链头。原创 2023-04-06 14:54:00 · 306 阅读 · 0 评论 -
输出单链表倒数第K个结点值
方法二:尾插法建立链表,先搜索距离第一个数据节点K个位置的节点,即用指针pcur指向第m+1个数据节点,然后用pnode指向第1个节点,两指针相距K个节点。每次移动两个指针,当pcur指向空节点时,pnode指向距离空节点K个位置的节点,即单链表倒数第K个结点。方法一:头插法建立链表,然后顺序遍历链表,找到第K个节点即可。原创 2023-04-03 22:10:26 · 783 阅读 · 0 评论 -
转换L(L1,L2,,,,,Ln)为L(L1,Ln,L2,Ln-1,,,,,,,,,),(要求时间复杂度和空间复杂度最低)
算法思想:算法思想,首先将L分为前半段Ltop=(L1,L2,Ln/2)和后半段Lbottom=(Ln/2+1,Ln/2+2,,,,Ln);将后半段Lbottom成(Ln,Ln-1,,,,Ln/2+1)之后,依次取Ltop和Lbottom中结点,将每一对结点插入到L中;重复上述步骤,直到其中一条链为空,然后将非空链的剩余结点插入L链中。原创 2023-04-05 13:20:51 · 66 阅读 · 0 评论 -
判断Lb是否为La的子链(链表)
如果从当前节点开始,与Lb中对应位置节点全部匹配成功,则Lb为La的子链,匹配成功,停止查找;如果在匹配过程中数据不相等,则从La中下一个节点作为下一轮匹配开始的位置重新匹配,直到La中节点全部访问完为停止,此时匹配失败。算法思想:从前往后依次访问La中的每一个节点,当前访问的节点视为一轮子链查找开始的位置。原创 2023-04-04 23:32:17 · 114 阅读 · 0 评论 -
La中删除同时出现在Lb和Lc的元素(元素递增排序无重复数据)
算法思想:每次在Lc和Lb中找相同点,然后在La中查找相同点;如果La中存在该相同点,则进行删除;重复上述步骤,直到三链中任意一条链中节点被搜索完,此时La中与其他两链的相同节点都被删除。原创 2023-04-04 17:34:16 · 57 阅读 · 0 评论 -
将带头单链表所有小于x的元素都排在前面,所有大于x的元素都排在后面
算法思想:构建一个只含头节点新表,在新表中插入一个值为x的临时节点,在完成操作之后再将其删除。依次访问链表中的每一个数据节点,如果当前访问节点小于x,则将其插入链表头;如果当前节点大于x,则将其插入链表尾;如果当前节点等于x,则将其插入到临时节点之前,同时更新临时节点的前驱;重复上述步骤,直到所有数据节点停止,最后删除临时节点。原创 2023-04-04 22:26:50 · 247 阅读 · 0 评论 -
归并按La和Lb得到新链表Lc(要求Lc不另外开辟空间且不含重复元素)
算法思想,用两个指针分别指向La和Lb的第一个数据节点,每次选La和Lb较小值尾插到Lc中,如果待插入节点与尾节点相同,则释放该节点,反之则追加到尾部;重复上述步骤,直到其中一条链被搜索完,将另外一条链每个元素依次插入到Lc尾部。原创 2023-04-04 19:20:46 · 216 阅读 · 0 评论 -
尾插法建立双链表
【代码】尾插法建立双链表。原创 2023-04-06 16:22:26 · 50 阅读 · 0 评论 -
头插法建立双链表
【代码】头插法建立双链表。原创 2023-04-06 16:18:46 · 123 阅读 · 0 评论 -
从无头单链表LA指定位置删除连续n个元素并插入无头单链表LB的指定位置
已知指针La和Lb分别指向两个无头节点单链表,编写函数完成从La中删除第j个元素开始的共len个元素,并将这len个元素插入到表Lb中第j个元素之前。原创 2023-04-03 12:15:32 · 158 阅读 · 0 评论 -
删除以带头结点的无序单链表中重复出现的元素
【代码】删除以带头结点的无序单链表中重复出现的元素。原创 2023-04-03 22:38:24 · 62 阅读 · 0 评论 -
用链表实现n人报m出圈程序
【输出形式】依次输出出圈编号,空格分隔。换行输出最后留下的编号。原创 2023-04-03 14:13:40 · 83 阅读 · 0 评论 -
将不带头的循环链表左移K个位置
算法思想:对于循环链表,左移K位,循环链表中的第K+1个结点将变成链表的第一个结点,所以只要将头指针指向循环链表第K+1个结点即实现循环左移K的操作。原创 2023-04-05 14:09:10 · 149 阅读 · 0 评论 -
直接插入排序整理链表,同时删除链表中相同元素(要求空间复杂度最低)
算法思想:构建一个只含头节点的空表L,然后取排序链中的每个数据节点在L中查找插入位置,如果当前节点已经存在链表中,则释放空间,反之,将其插入对应位置,重复上述步骤,直到数据链中不存在待插入节点为止。原创 2023-04-04 21:34:01 · 51 阅读 · 0 评论 -
求链表A和B的差集(A-B)
【代码】求链表A和B的差集(A-B)原创 2023-04-02 12:13:04 · 69 阅读 · 0 评论 -
将一个含有数字、字母、其他字符组成的循环链表拆分成三个链表
算法思想:遍历链表中所有数据域结点,判断访问结点的数据类型,将其插入到指定的循环链表。原创 2023-04-05 22:30:07 · 134 阅读 · 0 评论 -
将单链表第i号结点到第m号结点逆置成一个循环链表
算法思想:找到第i个结点和第m号结点,将m的后一个结点置空;将头节点L构造成只含头节点的循环空链表;遍历第i个结点到第m个结点,将其以头插法插入到循环链表中,即构成一个从i号结点到m号结点逆置的循环链表。原创 2023-04-05 23:24:08 · 76 阅读 · 0 评论 -
双链表数据结点原有位置保存在next域中,prior将所有结点从小到大顺序连接
算法思想:将prior看作单链表的next域来用,使用插入排序算法对双向链表进行排序,遍历双向链表中的每一个结点,按照从小到大顺序将其插入到新表L中,并且在插入时通过修改prior域来保存其在L中的位置。原创 2023-04-06 16:55:28 · 142 阅读 · 0 评论