又是老朋友链表输出题,依然采用哈希静态存储,但是这题稍复杂的是,有两条链表,但是我们可以默认link1>link2,然后让link2上的节点接着link1后面编号,并且注意link2是倒序输出的。

输出时有几个关键点:

1. gnum存储的是link1的2个节点为一组的组数,也就是,后面还可能孤着一个link2的节点

int gnum = cnt1/2;

外层for循环一共进行gnum次,其中前gnum-1次属于一种情况,不用担心-1的输出。 但是每次结束,都要判断link2是否到头。最后一组属于一种情况,再根据cnt1%2是否为0进行判断,要是为0说明link2的节点没有单独一个成组的,不为0也好办,因为也就多出一个结点。

 for(int i=0;i<gnum;i++){int j1 = i*2;int j2 = cnt-1-i;//j2>=cnt1if(i!=gnum-1){//不用担心-1,至少后面还有两个长链的元素 printf("%05d %d %05d\n",node[j1].add,node[j1].data,node[j1+1].add);printf("%05d %d ",node[j1+1].add,node[j1+1].data);if(j2>=cnt1){printf("%05d\n",node[j2].add);printf("%05d %d %05d\n",node[j2].add,node[j2].data,node[j1+2].add);}else printf("%05d\n",node[j1+2].add);}if(i==gnum-1){if(cnt1%2!=0){//其实后面还有1个尾巴 printf("%05d %d %05d\n",node[j1].add,node[j1].data,node[j1+1].add);printf("%05d %d ",node[j1+1].add,node[j1+1].data);if(j2>=cnt1){printf("%05d\n",node[j2].add);printf("%05d %d %05d\n",node[j2].add,node[j2].data,node[j1+2].add);}else printf("%05d\n",node[j1+2].add);printf("%05d %d -1\n",node[j1+2].add,node[j1+2].data);}else{printf("%05d %d %05d\n",node[j1].add,node[j1].data,node[j1+1].add);printf("%05d %d ",node[j1+1].add,node[j1+1].data);if(j2>=cnt1){printf("%05d\n",node[j2].add);printf("%05d %d -1\n",node[j2].add,node[j2].data);}else printf("-1\n");} }}

2. 如何判断link2是否输出完毕了呢?

由于此处是倒序,可以根据下标是否到达了第一个结点的下标,也就是link1的长度判断。

int j2 = cnt-1-i;//j2>=cnt1

起初是22分,用这个用例测结果未达到预期

1 4 4
1 1 2
2 2 3
3 3 -1
4 1 -1

原因是,我默认link1比link2长,只有在link1<link2是才会进行重新编序号的操作,在这个过程中让总有效节点个数cnt增加,但是如果不需要重新编序,则cnt会停留在0。而后面决定link2上的节点是否已输出完时还要用到cnt,所以会出错。

AC代码

#include<cstdio>
#include<cmath>
#include<algorithm>
#include<iostream>
#include<vector>
#include<string>
#include<queue>
#include<map>
#include<cstring>using namespace std;const int maxn = 100010;
const int SUP = 100010;//权重小于等于100 struct Node{int add,data,next;int no = maxn;
}node[maxn];bool cmp(Node a,Node b){return a.no<b.no;
}int main(){int s1,s2,n;scanf("%d %d %d",&s1,&s2,&n);int add,data,next;while(n--){scanf("%d %d %d",&add,&data,&next);node[add].add = add;node[add].data = data;node[add].next = next;}int h1 = s1,cnt1 = 0;while(h1!=-1){node[h1].no = ++cnt1;h1 = node[h1].next;}int h2 = s2,cnt2 = 0;while(h2!=-1){node[h2].no = ++cnt1;cnt2 ++;h2 = node[h2].next;}cnt1 = cnt1 - cnt2;int cnt = 0;if(cnt1<cnt2){//默认cnt1>2cnt2,让多数在前面 h2 = s2;while(h2!=-1){node[h2].no = ++cnt;h2 = node[h2].next;}h1 = s1;while(h1!=-1){node[h1].no = ++cnt;h1 = node[h1].next;}swap(cnt1,cnt2);}else cnt = cnt1 + cnt2;sort(node,node+maxn,cmp);int gnum = cnt1/2;for(int i=0;i<gnum;i++){int j1 = i*2;int j2 = cnt-1-i;//j2>=cnt1if(i!=gnum-1){//不用担心-1,至少后面还有两个长链的元素 printf("%05d %d %05d\n",node[j1].add,node[j1].data,node[j1+1].add);printf("%05d %d ",node[j1+1].add,node[j1+1].data);if(j2>=cnt1){printf("%05d\n",node[j2].add);printf("%05d %d %05d\n",node[j2].add,node[j2].data,node[j1+2].add);}else printf("%05d\n",node[j1+2].add);}if(i==gnum-1){if(cnt1%2!=0){//其实后面还有1个尾巴 printf("%05d %d %05d\n",node[j1].add,node[j1].data,node[j1+1].add);printf("%05d %d ",node[j1+1].add,node[j1+1].data);if(j2>=cnt1){printf("%05d\n",node[j2].add);printf("%05d %d %05d\n",node[j2].add,node[j2].data,node[j1+2].add);}else printf("%05d\n",node[j1+2].add);printf("%05d %d -1\n",node[j1+2].add,node[j1+2].data);}else{printf("%05d %d %05d\n",node[j1].add,node[j1].data,node[j1+1].add);printf("%05d %d ",node[j1+1].add,node[j1+1].data);if(j2>=cnt1){printf("%05d\n",node[j2].add);printf("%05d %d -1\n",node[j2].add,node[j2].data);}else printf("-1\n");} }}return 0;
}

PAT(甲级)2019年秋季考试 7-2 Merging Linked Lists相关推荐

  1. 记PAT 甲级 2021年 秋季考试 经验总结、线上考试细节、考场题解

    1.简单回顾 今天下午考完了秋季的考试,最终得了97分,第一题扣了3分,非常遗憾.还有一个多小时的时候就已经97了,回来和第一题的剩余3分周旋到最后,没能发现问题所在,不停考虑各种,我觉得可能是陷在已 ...

  2. 广播计算机应用基础,2019年秋季考试《计算机应用基础》在线考核试题 广播幻灯片操作应选择的功能区是...

    2019年秋季考试<计算机应用基础>在线考核试题 广播幻灯片操作应选择的功能区是 (12页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 14. ...

  3. 天大计算机应用基础试题答案,天大2019年秋季考试《计算机应用基础》在线考核试题100分答案...

    2019年秋季考试<计算机应用基础>在线考核试题 共题,总分:100分 时间:57分24秒 答题中 分 一.单选题共50题,100分 1 2分 在Windows中使用Ait+Tab键的作用 ...

  4. 2019年秋季计算机应用基础,天大2019年秋季考试《计算机应用基础》在线考核试题【满分答案】...

    2019年秋季考试<计算机应用基础>在线考核试题-0064 试卷总分:100  得分:100 一.单选题 (共 50 道试题,共 100 分) 1.运算器.控制器和寄存器组成了微机的( ) ...

  5. 使用计算机打印汉字文档是汉字答案,天大2019年秋季考试《计算机应用基础》在线考核试题【满分答案】...

    2019年秋季考试<计算机应用基础>在线考核试题-0064 试卷总分:100  得分:100 一.单选题 (共 50 道试题,共 100 分) 1.运算器.控制器和寄存器组成了微机的( ) ...

  6. 2019秋季计算机应用基础,2019年秋季考试《计算机应用基础》在线考核试题 在Excel 2010的工作表中...

    2019年秋季考试<计算机应用基础>在线考核试题 在Excel 2010的工作表中 (12页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 14 ...

  7. 【PAT】2020年秋季考试划水准备贴

    1.环境 1.时间 PAT一年有三次考试,春季(2-3),秋季(8-9)和冬季(11-12) 本次考试时间: 2020/09/05 13:30:00 2.地点 PAT在非浙江地区(比如上海),往往都只 ...

  8. PAT(甲级)2019年秋季考试 7-3 Postfix Expression

    只在编译原理学过一点后序表达式,我把这题当作普通的二叉树遍历,事实上也的确如此.我注意到"-"这个符号不一样,别的都是后序遍历,但是遇到这个负号/减号就变成了先序. 于是我对负号做 ...

  9. PAT甲级 2019年冬季 题解

    题目1:7-1 Good in C (20分) When your interviewer asks you to write "Hello World" using C, can ...

最新文章

  1. Linux内核分析作业第二周
  2. r语言和python-R语言和Python —— 一个
  3. WINCE蓝牙应用开发方式
  4. tomcat下只有.class文件 没有java文件_解决tomcat发布工程后,WEB-INF/classes下文件不编译的问题...
  5. Exception in thread main java.io.IOException: No FileSystem for scheme: hdfs
  6. Kubernetes里ingress配置的一些例子
  7. 深度学习模型建立过程_所有深度学习都是统计模型的建立
  8. tableau for循环_Tableau for Data Science and Data Visualization-速成课程
  9. 我见过的最漂亮代码---通过删除代码来实现功能的提升
  10. 阿里云创新产品团队招聘!一大波岗位呼唤你
  11. mysql 时间类型datetime与timestamp区别比较
  12. FPGA内部资源结构——以Altera CycloneⅣ 为例
  13. 常见的Cracker攻击手法
  14. imx6ul can调试(代码)
  15. python批量图像处理_基于python代码批量处理图片resize
  16. 有哪些高性价比的LoRa模块?
  17. html5 拓扑图 切片,HTML5复杂拓扑图(四) 组织结构图
  18. matlab 颜色对应三原色(转)
  19. 中职计算机英语视频,中职计算机微课视频一等奖(中职英语微课)
  20. AccuWeather天气预报应用介绍

热门文章

  1. Vue.js 数据绑定渲染Demo
  2. 监听UIWebView点击视频播放的事件
  3. springboot 头像上传 文件流保存 文件流返回浏览器查看 区分操作系统 windows 7 or linux...
  4. Android 自定义View之3D骰子旋转
  5. 环形动画加载视图AnimatedCircleLoadingView​​​​​​​
  6. 【H.264/AVC视频编解码技术详解】十九:熵编码算法(5)——H.264的CABAC(上):语法元素的二值化方法...
  7. springmvc常用注解标签详解
  8. antd+dva笔记
  9. 一个从四秒到10毫秒,花了1年的算法问题?
  10. JAVA的正则表达式语法