【2.5】

【题目大意】去掉链表中绝对值重复过的数字(只保留第一个)

【解法】删除的时候用当前枚举到的节点的前一个节点,这样的话能够方便删除。用数组来判重。

【代码】

int flag[10000+10];
void quchong(LNode *L){LNode *p = L;while (p->next!=NULL){int t = p->next->data;if (t<0) t = -t;if (flag[t]==0){flag[t] = 1;p = p->next;}else{LNode *temp = p->next;p->next = temp->next;free(temp);}}
}

  

【2.6】

【题目大意】让你把两个有序链表合并成一个有序链表

【做法】就按照归并排序的思路合并就ojbk了,合并的时候把合并后的结果接在第一个链表的头结点后面就好!

【代码】

//合并之后,放到第一个链表里面
void _merge(LNode *h1,LNode *h2){LNode *p1 = h1->next;LNode *p2 = h2->next,*t;h1->next = NULL;t = h1;while (p1!=NULL && p2!=NULL){if (p1->data<p2->data){t->next = p1;t = p1;p1 = p1->next;}else{t->next = p2;t = p2;p2 = p2->next;}}while (p1!=NULL) {t->next = p1;t = p1;p1=p1->next;}while (p2!=NULL){t->next = p2;t = p2;p2 = p2->next;}
}

  

【2.7】

【题目大意】一个升序一个逆序的链表,让你合并成一个有序的单链表。

【做法】把逆序的那个原地倒置就好

//先把第二个链表原地倒置 然后当成2.6的合并做就好
void _merge(LNode *h1,LNode *h2){LNode *p = h2->next;h2->next = NULL;while (p){LNode * temp = p->next;p->next = h2->next;h2->next = p;p = temp;}LNode *p1 = h1->next;LNode *p2 = h2->next,*t;h1->next = NULL;t = h1;while (p1!=NULL && p2!=NULL){if (p1->data<p2->data){t->next = p1;t = p1;p1 = p1->next;}else{t->next = p2;t = p2;p2 = p2->next;}}while (p1!=NULL) {t->next = p1;t = p1;p1=p1->next;}while (p2!=NULL){t->next = p2;t = p2;p2 = p2->next;}
}

  

【2.8】同【2.6】代码

【2.9】

【题目大意】

无头结点的单链表两个
两个都是有序的
让你把这两个单链表合并成一个链表。
要求不能破坏第二个链表的结构

【做法】

在做归并的时候,如果第一个等于第二个,那么就跳过第二个链表遍历到的元素,这样第一个链表上有的元素,第二个链表里对应的就不会管他了。

无头结点不好直接在h1的基础上添加新的元素,所以自己另外创建一个无头结点的链表.一个一个累加上去就好。

【代码】

//这里必须要用二重指针,因为我们要改变第一个链表的指向(我们新创的一个链表)
//main函数里调用_merge(&h1,h2)即可(h2不用变)
void _merge(LNode **h1,LNode *h2){LNode *p1 = *h1;LNode *p2 = h2,*h3;h3 = newnode();//不好直接接在第一个链表上,所以新创建一个LNode *t = newnode();t = h3;while (p1!=NULL && p2!=NULL){if (p1->data<p2->data){LNode *temp = newnode(); //不能破坏原始链表,所以只能自己创了temp->data = p1->data;t->next = temp;t = temp;p1 = p1->next;}else if (p1->data>p2->data){LNode *temp = newnode();temp->data = p2->data;t->next = temp;t = temp;p2 = p2->next;}else if (p1->data==p2->data){//如果两个链表中有,那么只要第一个链表中的p2 = p2->next;}}if (p1==NULL) p1 = p2; //这样写比较简洁while (p1!=NULL) {LNode *temp = newnode();temp->data = p1->data;t->next = temp;t = temp;p1=p1->next;}*h1 = h3->next;//让h1再指向h3
}

  

【2.10】和【2.9的代码一样】只不过变成带头结点的了。遍历到两个链表的p和q的时候,如果p->data==q->data,则跳过其中一个就好了。

因为是集合,所以只会重复一次。

【2.11】

【题目大意】

求两个集合的交集(在两个链表里递增排列),

【做法】

也没说带不带头结点。。。就当做是有头结点吧。放在A链表中,这个简单,重构下A链表就好。

在归并的时候,如果p和q节点的节点值相同,就加到A链表的后面就好

【代码】

void _merge(LNode *h1,LNode *h2){LNode *p1 = h1->next;LNode *p2 = h2->next,*t;h1->next = NULL;t = h1;while (p1!=NULL && p2!=NULL){if (p1->data<p2->data){p1 = p1->next;}else if (p1->data>p2->data){p2 = p2->next;}else if (p1->data==p2->data){//如果两个链表中有,任取一个放在newA链表后面t->next = p1;t = p1;p1 = p1->next;}}
}

  

【2.12】和【2.11】一样的。

【2.13】也一样。。

【2.14】

题目大意:给你三个递增链表A,B,C让你求A∪(B∩C),时间复杂度要求为O(|A|+|B|+|C|)

【数据结构1800题 (陈守孔) 第2章】线性表 算法设计题全解相关推荐

  1. 线性表--算法设计题2.29

    已知A,B和C为三个递增有序的线性表,现要求对A表作如下操作:删去那些既在B表中出现又在C表中出现的元素.试对顺序表编写实现上述操作的算法.(注意:题中没有特别指明同一表中的元素值各不相同). C c ...

  2. 线性表--算法设计题2.23

     设线性表A=(a1,a2--,am),B=(b1,b2--,bn),试写一个按下列规则合并A,B为线性表C的算法,即使得 C=(a1,b1,--am,bm,--bn) 当m<=n时: C=(a ...

  3. 线性表--算法设计题2.25

    假设以两个元素依值递增有序排列的线性表A和B分别表示两个集合(即同一表中的元素值各不相同),现要求另辟空间构成一个线性表C,其元素为A和B中元素的交集,且表C中的元素有依值递增有序排列.试对顺序表编写 ...

  4. 保研面试 算法题_面试挂在了一道 LRU 缓存算法设计题

    前言 好吧,有人可能觉得我标题党了,但我想告诉你们的是,前阵子面试确实挂在了 RLU 缓存算法的设计上了. 当时面试官问到这个题的时候,很快给了一个思路,但是手写的时候,发现自己没有深刻理解它,加上当 ...

  5. 算法设计题3.16-栈和队列-第3章-《数据结构习题集》-严蔚敏吴伟民版

    习题集完整源码部分 第3章  栈和队列                                                                                 ...

  6. 算法设计题3.27-栈和队列-第3章-《数据结构习题集》-严蔚敏吴伟民版

    习题集完整源码部分 第3章  栈和队列                                                                                 ...

  7. c语言数据结构算法设计题,数据结构题集(C语言版)算法设计题答案[].doc

    数据结构题集(C语言版)算法设计题答案[].doc 第一章 绪论 1.16 void print_descending(int x,int y,int z)// 按从大到小顺序输出三个数 { scan ...

  8. 大话数据结构读书笔记艾提拉总结 查找算法 和排序算法比较好 第1章数据结构绪论 1 第2章算法 17 第3章线性表 41 第4章栈与队列 87 第5章串 123 第6章树 149 第7章图 21

    大话数据结构读书笔记艾提拉总结 查找算法 和排序算法比较好 第1章数据结构绪论 1 第2章算法 17 第3章线性表 41 第4章栈与队列 87 第5章串 123 第6章树 149 第7章图 211 第 ...

  9. 用c语言线性表的链式表示实现,数据结构-使用C语言 朱战立第2章线性表的链式表示.ppt...

    数据结构-使用C语言 朱战立第2章线性表的链式表示 * 循环链表(circular linked list) 循环链表是表中最后一个结点的指针指向头结点,使链表构成环状 特点:从表中任一结点出发均可找 ...

  10. C语言数据结构-第二章线性表-电大

    第二章线性表--内容简介 本章将进入线性结构的学习. 线性结构是最简单.最常用的一种数据结构. 本章将学习线性表的定义.顺序和链式两种存储方式及相应存储结构上的运算实现.通过典型示例训练,掌握线性表的 ...

最新文章

  1. TensorFlow 笔记1--基本用法
  2. HTML字体怎么显示,教你如何用CSS来控制网页字体的显示样式
  3. 周鸿祎:物联网时代的三大威胁
  4. 洛谷 P3732 [HAOI2017]供给侧改革【trie树】
  5. Perl 数字与字符串运算符之区别
  6. 创业,如果不懂这9条路径规划,就等于走上了一条不归路
  7. sql server 缓存_搜索SQL Server查询计划缓存
  8. pytorch实现人脸识别_PyTorch实现,GitHub4000星:微软开源的CV库
  9. 《Python自动化》学习笔记:百度云智能进行文字识别(代码干货)
  10. linux修改mdc时钟,Linux下用xsupplicant或mdc拨号上网
  11. 流水线机制、滑动窗口协议、GBN、SR
  12. HTML - 'MARQUEE'
  13. c语言小型超市库存与管理系统,小型超市管理系统的设计与实现(毕业设计).doc...
  14. 刷入Magisk/SuperSU实现ROOT
  15. SEO快速建站,八部曲
  16. 安装软件,python安装,node.js安装,pycharm安装,vscode安装,PR, PS, LR.AE Windows开关机等,雪崩的时候没有一片雪花儿是无辜的
  17. 教你游泳【附动画组图】
  18. 【OpenCV入门教程】图像加噪
  19. 黑洞同样释放能量--霍金修正黑洞理论
  20. 海量数据处理方法总结 常见大数据题目汇总

热门文章

  1. 图书租借管理系统java_阅览室图书租借管理系统下载
  2. 完美C语言通讯录(含代码)
  3. ArcGIS+Fragstats软件进行景观格局指数分析(附练习数据下载)
  4. fastDFS 无法获取服务端连接资源:找不到可用的tracker
  5. vm虚拟机win7安装镜像方法
  6. 时钟天气小插件显示没服务器,天气时钟小插件大全
  7. 【Python教你一招】用Python实现黑客帝国代码雨效果(3种方式)
  8. 大数据视频资源——尚硅谷大数据视频地址
  9. Eclipse基础--安装eclipse及语言包
  10. python编写米字格的步骤_2分钟学会在Word中制作田字格 米字格 书法练字再也不用买本子了...