PAT 1161 Merging Linked Lists

原题链接:暂无
关键词:链表

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

题目大意: 给出两个链表,要求按照规则输出合并后的链表
思路: 先把节点数据存储下来,然后分别获取出两条链表的节点,然后进行按要求拼接。
代码:

#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;

const int N = 100000 + 10; 
struct Node
{
    int address, data, next;
}nodes[N];

int main()
{
    int head, add1, add2, n;
    cin >> add1 >> add2 >> n;	//2个开始地址 结点数 
    vector<Node>v1, v2, res;	//存储链表值
    for (int i = 0; i < n; ++i)
    {
        int a, b, c;
        cin >> a >> b >> c;
        nodes[address] = { a,b,c };
    }
    
    for (int p = add1; p != -1; p = nodes[p].next)
        v1.push_back(nodes[p]);
    for (int p = add2; p != -1; p = nodes[p].next)
        v2.push_back(nodes[p]);
        
    if (v1.size() > v2.size())
        head = add1;
    else
    {
        v2 = v1;	//v2是短链表 
        head = head2;
    }
    
    int k = 0;
    while (head != -1)
    {
        res.push_back(nodes[head]);
        ++k;
        if (k % 2 == 0 && !v2.empty())//两个中间插一个
        {
            res.push_back(v2.back());
            v2.pop_back();
        }
        head = nodes[head].next;
    }
    
    for (int i = 0; i < res.size() - 1; ++i)
        printf("%05d %d %05d\n", res[i].addr, res[i].val, res[i+1].addr);
    printf("%05d %d %d\n", res.back().addr, res.back().val, -1);
    return 0;
}

热门文章

暂无图片
编程学习 ·

Unity2D教程:菜单界面、文字设置、常用界面功能

菜单界面创建一个UI-Image,会自动生成Canvas。 设置Canvas的设置模式为随屏幕改变 设置Image的伸展模式,在这个界面按下Alt键会变成这样,选择右下角那个就是填充整个Canvas了在当前Image下创建Button,将Button下面的Text和Button自身都弄成预置物Text可以加一个Outline组件…
暂无图片
编程学习 ·

初见springBoot

如果本文对您有所帮助,可以点一下赞👍本文只是学习笔记,欢迎指错,转载标明出处环境:JDK 1.8Mysql 5.5maven 3.6.3idea 20191、SSM框架和SpringBoot区别因为当springboot 嵌入springmvc的时候很多人以为它就是另一种web框架了,这是一种误区。事实上它和原有的springmvc相…
暂无图片
编程学习 ·

命令模式

菜鸟教程中代理模式总结)1.定义:将请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令 的合适的对象,并把该命令传给相应的对象,该对象执行命令。 2.主要解决:行为请求者与行为实现者通常是一种紧耦合的关系,为了消除这种耦合关系 3.何时使用:命…
暂无图片
编程学习 ·

《剑指 Offer》——调整数组顺序使奇数位于偶数前面

1. 本题知识点 数组 2. 题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 例如: Input: [1,2,3,4,5]Output: [1,3,5,2,4]3. 解题思路 …
暂无图片
编程学习 ·

半导体物理复习总结(五)——非平衡载流子

非平衡载流子 热平衡状态是指在一定温度下,半导体中的载流子浓度一定。载流子的产生与复合相等,载流子的浓度乘积一定。统一的费米能级是热平衡状态的标志。非平衡状态是指在外界因素的影响下,半导体平衡状态受到微扰,内部的载流子浓度产生涨落。 复合是电子和空穴被洇灭或…
暂无图片
编程学习 ·

LeetCode题解(0762):二进制表示中质数个计算置位(Python)

题目:原题链接(简单)解法 时间复杂度 空间复杂度 执行用时Ans 1 (Python) O(N)O(N)O(N) O(1)O(1)O(1) 200ms (99.05%)Ans 2 (Python)Ans 3 (Python)LeetCode的Python执行用时随缘,只要时间复杂度没有明显差异,执行用时一般都在同一个量级,仅作参考意义。解法一:【思路】…
暂无图片
编程学习 ·

Python——走马灯

走马灯 def f():import times=人生苦短,我学Pythonc=0while True:print(s)time.sleep(0.3)#休眠0.3秒。每隔0.3秒,即300毫秒显示一行代码s=s[1:]+s[0]c+= 1if c==2*len(s):break f()输出结果 人生苦短,我学Python 生苦短,我学Python人 苦短,我学Python人生 短,我学Python…
暂无图片
编程学习 ·

redis基础知识汇总

redis基础知识汇总一、redis 基础知识1. 什么是Redis?2. redis的优缺点?3. redis比memcached的优势在哪里?以及两者的区别?4. redis的持久化策略?5. Redis过期键的删除策略6. 数据淘汰策略7. redis的事务?8、redis 事件?9、redis 集群redis哨兵数据分片主从配置二、Redi…
暂无图片
编程学习 ·

关于JavaScript的的高速缓存未命中分析【云图智联】

免费学习视频欢迎关注云图智联:https://e.yuntuzhilian.com/在本文中,我们将讨论创建和访问数据的方式可能对应用程序性能的影响。介绍JavaScript是一种非常高级的语言,在使用JavaScript开发的时候不必对存储器中的数据存储方式作过多的考虑。在本文中,我们将探讨数据如何存…
暂无图片
编程学习 ·

CSS 总结

一、CSS三大特性:层叠性、继承性、优先级 层叠性 层叠性:就近原则。 分两种情况:同类选择器,第二个选择器样式会覆盖第一个选择器样式。 在同一个选择器中,相同的属性会以最后一个为准。继承性 继承性:子承父业 特殊:a标签不受影响因为它又自己的特性 优先级 优先级选择…
暂无图片
编程学习 ·

Python代码

hello world!!! import numpy as npfrom sklearn import linear_modelfrom mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as pltxx, yy = np.meshgrid(np.linspace(0,10,10), np.linspace(0,100,10)) zz = 1.0 * xx + 3.5 * yy + np.random.randint(0,100,…
暂无图片
编程学习 ·

Android MVVM Demo

AndroidMvvm练习AndroidMVVM 是Google推出的,网上介绍也有很多,我就不废话了,公司项目中使用的mvvm,我整理个小demo练习记录一下1.DataBinding配置dataBinding {enabled = true}在XML中使用, 原先的布局还是照常写<layout xmlns:android="http://schemas.android.c…
暂无图片
编程学习 ·

当你忘记网站上的密码时怎么办?Python如何快速帮你找回?

前言本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。现如今浏览器可谓是五花八门,火狐、UC、360、QQ 这些浏览器不论美观还是所谓的安全方面都做的很符合我们需求。但如果你的工作与 IT 挂钩,无疑 Chr…
暂无图片
编程学习 ·

开启阿里云对象存储OSS防误删新功能,保护您珍贵的数据。

一、背景阿里云对象存储 OSS 是保存海量数据的平台,支持丰富的应用。在使用过程中难免会遇到误操作、程序 Bug、覆盖写等导致数据被删除的场景,对于数据的丢失会非常着急,后果也非常严重,甚至某些情况下还会影响你的职业生涯。OSS 每年都会遇到多起客户误删除数据的事件,为…
暂无图片
编程学习 ·

一文聊透This

Thisthis指向当前属性所在对象。 var A = {name: 张三,describe: function () {return 姓名:+ this.name;} };var name = 李四; var f = A.describe; f() // "姓名:李四"JavaScript 语言之中,一切皆对象,运行环境也是对象,所以函数都是在某个对象之中运行,this…
暂无图片
编程学习 ·

11.1 函数的默认参数

11.1 函数的默认参数 之前我们学过的,如果函数由形参,那么调用函数时要传递对性的实参。 事实上,函数可以有默认参数,这样如果不传递实参,则按照默认值给形参传值。函数声明和实现只能有一个默认参数,不能重复定义默认参数。 如果某个形参有了默认参数,则位于这个形参之…