PAT甲级【2019年9月考题】——A1162 MergingLinkedLists【25】
7-2 Merging Linked Lists (25 分)
Given two singly linked lists L 1 =a 1 →a 2 →...→a n−1 →a n L1=a1→a2→...→an−1→an and L 2 =b 1 →b 2 →...→b m−1 →b m L2=b1→b2→...→bm−1→bm . If n≥2m n≥2m , you are supposed to reverse and merge the shorter one into the longer one to obtain a list like a 1 →a 2 →b m →a 3 →a 4 →b m−1 ... a1→a2→bm→a3→a4→bm−1... For example, given one list being 6→7 and the other one 1→2→3→4→5, you must output 1→2→7→3→4→6→5.
Input Specification
Each input file contains one test case. For each case, the first line contains the two addresses of the first nodes of L 1 L1 and L 2 L2 , plus a positive N(≤10 5 ) N(≤105) which is the total number of nodes given. The address of a node is a 5-digit nonnegative integer, and NULL is represented by -1.
Then N lines follow, each describes a node in the format:
Address Data Next
where Address is the position of the node, Data is a positive integer no more than 10 5 105 , and Next is the position of the next node. It is guaranteed that no list is empty, and the longer list is at least twice as long as the shorter one.
Output Specification
For each case, output in order the resulting linked list. Each node occupies a line, and is printed in the same format as in the input.
Sample Input
00100 01000 7
02233 2 34891
00100 6 00001
34891 3 10086
01000 1 02233
00033 5 -1
10086 4 00033
00001 7 -1
Sample Output
01000 1 02233
02233 2 00001
00001 7 34891
34891 3 10086
10086 4 00100
00100 6 00033
00033 5 -1
【声明】
由于此题还未上PAT官网题库,故没有测试集,仅仅是通过了样例,若发现错误,感谢留言指正。
Solution:
很简单,就是先把节点数据存储下来,然后分别获取出两条链表的节点,然后进行按要求拼接。
#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;
struct Node
{
int addr, val, next;
}nodes[];
int main()
{
int head, head1, head2, n;
cin >> head1 >> head2 >> n;
vector<Node>v1, v2, res;//存储列表值
for (int i = ; i < n; ++i)
{
int a, b, c;
cin >> a >> b >> c;
nodes[a] = { a,b,c };
}
for (int p = head1; p != -; p = nodes[p].next)
v1.push_back(nodes[p]);
for (int p = head2; p != -; p = nodes[p].next)
v2.push_back(nodes[p]);
if (v1.size() > v2.size())
head = head1;
else
{
v2 = v1;//v2是短边
head = head2;
}
int k = ;
while (head != -)
{
res.push_back(nodes[head]);
++k;
if (k % == && !v2.empty())//两个中间插一个
{
res.push_back(v2.back());
v2.pop_back();
}
head = nodes[head].next;
}
for (int i = ; i < res.size() - ; ++i)
printf("%05d %d %05d\n", res[i].addr, res[i].val, res[i+].addr);
printf("%05d %d %d\n", res.back().addr, res.back().val, -);
return ;
}
PAT甲级【2019年9月考题】——A1162 MergingLinkedLists【25】的更多相关文章
- PAT甲级【2019年3月考题】——A1157 Anniversary【25】
Zhejiang University is about to celebrate her 122th anniversary in 2019. To prepare for the celebrat ...
- PAT甲级【2019年9月考题】——A1164 DijkstraSequence【30】
7-4 Dijkstra Sequence (30 分) Dijkstra's algorithm is one of the very famous greedy algorithms. It is ...
- PAT甲级【2019年9月考题】——A1163 PostfixExpression【25】
7-3 Postfix Expression (25 分) Given a syntax tree (binary), you are supposed to output the correspon ...
- PAT甲级【2019年9月考题】——A1160 Forever【20】
7-1 Forever (20 分) "Forever number" is a positive integer A with K digits, satisfying the ...
- PAT甲级【2019年3月考题】——A1159 Structure_of_a_BinaryTree【30】
Suppose that all the keys in a binary tree are distinct positive integers. Given the postorder and i ...
- PAT甲级【2019年3月考题】——A1158 TelefraudDetection【25】
Telefraud(电信诈骗) remains a common and persistent problem in our society. In some cases, unsuspecting ...
- PAT甲级【2019年3月考题】——A1156 SexyPrimes【20】
Sexy primes are pairs of primes of the form (p, p+6), so-named since “sex” is the Latin word for “si ...
- PAT甲级2019冬季考试题解
A Good In C纯模拟题,用string数组读入数据,注意单词数量的判断 #include<bits/stdc++.h> using namespace std; ; ][]; in ...
- PAT甲级题解-1097. Deduplication on a Linked List (25)-链表的删除操作
给定一个链表,你需要删除那些绝对值相同的节点,对于每个绝对值K,仅保留第一个出现的节点.删除的节点会保留在另一条链表上.简单来说就是去重,去掉绝对值相同的那些.先输出删除后的链表,再输出删除了的链表. ...
随机推荐
- NEO4J -模糊查询
模糊查询 match(emp) where emp.name =~'.*haha.*' return emp 现有节点创建关系 MATCH (cust:Customer),(cc:CreditCard ...
- JavaScript中的方法和属性
书读百遍其义自见 学习<JavaScript设计模式>一书时,前两个章节中的讲解的JavaScript基础知识,让我对属性和方法有了清晰的认识.如下是我的心得体会以及部分摘录的代码. 不同 ...
- oracel分页查询
SELECT * FROM ( SELECT temp.*, ROWNUM RN FROM (SELECT * FROM 表名) temp WHERE ROWNUM <=end (page*pa ...
- Linux ssh黄金参数
Linux ssh黄金参数 命令: -o ConnectionAttempts= -o PasswordAuthentication=no -o StrictHostKeyChecking=no cp ...
- 06.Linux-RedHat系统网卡服务连不上活跃连接路径变化
问题:在新装的系统中,重启网卡的时候出现如下报错 [root@localhost ~]# service network restart 正在关闭接口 eth0: 设备状态:3 (断开连接) [确定] ...
- OkHttp源码剥离导入到eclipse中
1.里面有两个类关于Android版本的我稍微修改过了,没有用的. 2.可以直接导入eclipse中,maven里面的jar包可能还有不需要的冗余,可以自己去剔除. https://github.co ...
- springboot使用异步查询数据
主要适用于需要查询多种类型的数据,而且二者的参数没有关联的情况. 1.开启异步调用注解 2.创建抽象类,定义相关方法 /** * @author:YZH * time: 2019/8/8 12:16 ...
- httpclient get/post请求
public static String httpPost(String url, JSONObject json) { String respContent = null; try{ HttpPos ...
- Strcpy,strcpy使用注意
一.char *strcpy(char *dest, const char *src) 参数 dest -- 指向用于存储复制内容的目标数组. src -- 要复制的字符串. 注意: 1.dest需要 ...
- 小程序之背景音乐——wx.backgroundAudioManager
var that = this; const back = wx.getBackgroundAudioManager(); back.onPlay(() => { console.log(&qu ...