• 1105 链表合并 – PAT乙级真题


    给定两个单链表 L1​=a1​→a2​→⋯→an−1​→an​ 和 L2​=b1​→b2​→⋯→bm−1​→bm​。如果 n≥2m,你的任务是将比较短的那个链表逆序,然后将之并入比较长的那个链表,得到一个形如 a1​→a2​→bm​→a3​→a4​→bm−1​⋯ 的结果。例如给定两个链表分别为 6→7 和 1→2→3→4→5,你应该输出 1→2→7→3→4→6→5。

    输入格式:

    输入首先在第一行中给出两个链表 L1​ 和 L2​ 的头结点的地址,以及正整数
    N (≤105),即给定的结点总数。一个结点的地址是一个 5 位数的非负整数,空地址 NULL 用 -1 表示。

    随后 N 行,每行按以下格式给出一个结点的信息:

    Address Data Next

    其中 Address 是结点的地址,Data 是不超过 105 的正整数,Next 是下一个结点的地址。题目保证没有空链表,并且较长的链表至少是较短链表的两倍长。

    输出格式:

    按顺序输出结果链表,每个结点占一行,格式与输入相同。

    输入样例:

    00100 01000 7
    02233 2 34891
    00100 6 00001
    34891 3 10086
    01000 1 02233
    00033 5 -1
    10086 4 00033
    00001 7 -1

    输出样例:

    01000 1 02233
    02233 2 00001
    00001 7 34891
    34891 3 10086
    10086 4 00100
    00100 6 00033
    00033 5 -1

    分析:用vector L1、L2存储题目中给定的两个链表,vector ans保存合并后的链表。将较长的一个链表存储在L1中,如果原本L1较短,则将L1与L2用swap函数互相置换~在链表合并的过程中,i从0开始,将L1中每个结点添加到ans中,如果当前i是奇数(i & 1不等于0)就把L2的一个结点添加到ans中,直到L2中没有剩余元素~如此反复,就大功告成啦。

    1. #include
    2. #include
    3. using namespace std;
    4. struct node {
    5. int data, next;
    6. }A[100000];
    7. vector<int> L1, L2, ans;
    8. int sa, sb, n, a, ta, tb, c;
    9. int main() {
    10. cin >> sa >> sb >> n;
    11. for (int i = 0; i < n; i++) {
    12. cin >> a >> A[a].data >> A[a].next;
    13. }
    14. ta = sa;
    15. while (ta != -1) {
    16. L1.push_back(ta);
    17. ta = A[ta].next;
    18. }
    19. tb = sb;
    20. while (tb != -1) {
    21. L2.push_back(tb);
    22. tb = A[tb].next;
    23. }
    24. if (L1.size() < L2.size()) swap(L1, L2);
    25. for (int i = 0, c = L2.size() - 1; i < L1.size(); i++) {
    26. ans.push_back(L1[i]);
    27. if (i & 1 && c >= 0) ans.push_back(L2[c--]);
    28. }
    29. for (int i = 1; i < ans.size(); i++) {
    30. printf("%05d %d %05d\n", ans[i-1], A[ans[i-1]].data, ans[i]);
    31. }
    32. printf("%05d %d -1", ans.back(), A[ans.back()].data);
    33. return 0;
    34. }

  • 相关阅读:
    AVR单片机开发11——1602液晶屏幕
    以太坊 layer2: optimism 源码学习 (一)
    【云原生】聊聊为什么需要docker以及其基础架构
    C++ Skip | AtCoder
    Java集合(四) --- Map
    Java多线程(6):锁与AQS(下)
    一篇论文回顾 Sora 文生视频技术的背景、技术和应用。
    【含java2023面试题】HashMap、HashTable、ConcurrentHashMap
    以太坊EVM智能合约中的数据存储
    Transformers实战(二)快速入门文本相似度、检索式对话机器人
  • 原文地址:https://blog.csdn.net/liuchuo/article/details/126209963