首页 > 其他分享 >1110 区块反转——25分

1110 区块反转——25分

时间:2022-10-03 00:11:26浏览次数:47  
标签:25 结点 int ++ next 1110 v2 区块 first

给定一个单链表 L,我们将每 K 个结点看成一个区块(链表最后若不足 K 个结点,也看成一个区块),请编写程序将 L 中所有区块的链接反转。例如:给定 L 为 1→2→3→4→5→6→7→8,K 为 3,则输出应该为 7→8→4→5→6→1→2→3

输入格式:
每个输入包含 1 个测试用例。每个测试用例第 1 行给出第 1 个结点的地址、结点总个数正整数 N (≤10^5)、以及正整数 K (≤N),即区块的大小。结点的地址是 5 位非负整数,NULL 地址用 −1 表示。

接下来有 N 行,每行格式为:

Address Data Next

其中 Address 是结点地址,Data 是该结点保存的整数数据,Next 是下一结点的地址。

输出格式:
对每个测试用例,顺序输出反转后的链表,其上每个结点占一行,格式与输入相同。

输入样例:

00100 8 3
71120 7 88666
00000 4 99999
00100 1 12309
68237 6 71120
33218 3 00000
99999 5 68237
88666 8 -1
12309 2 33218

输出样例:

71120 7 88666
88666 8 00000
00000 4 99999
99999 5 68237
68237 6 00100
00100 1 12309
12309 2 33218
33218 3 -1

|代码长度限制 | 时间限制 | 内存限制 |
| 16KB | 400ms | 64MB |

代码:

#include<bits/stdtr1c++.h>
using namespace std;
struct node {
    int adress, data, next;
} N[100005];
vector<node> v1, v2;
int main() {
    int first, n, k;
    cin >> first >> n >> k;
    for (int i = 0, t; i < n; i++) {
        cin >> t;
        N[t].adress = t;
        cin >> N[t].data >> N[t].next;
    }
    while (first != -1) {
        v1.emplace_back(N[first]);
        first = N[first].next;
    } //使链表有序
    int t = int(v1.size()) / k, cnt = 0, j = 0;
    vector<node> List[t + 1]; //使用二维数组对序列进行分组,方便后面反转
    for (int i = 0; i < int(v1.size()); i++) {
        List[j].emplace_back(v1[i]);
        cnt++;
        if (cnt == k) {
            cnt = 0, j++; //当cnt与k相等时进入下一组
        }
    }
    for (int a = j; a >= 0; a--) { //反转操作
        for (int b = 0; b < int(List[a].size()); b++) {
            v2.emplace_back(List[a][b]); //将反转的序列元素加入v3中
        }
    }
    int len = v2.size();
    for (int i = 0; i < len; i++) {
        if (i !=  len - 1) v2[i].next = v2[i + 1].adress; //重新调整每个节点的当前地址和后继地址
        else v2[i].next = -1;
    }
    for (int i = 0; i < len; i++) {
        if (i != len - 1) printf("%05d %d %05d\n", v2[i].adress, v2[i].data, v2[i].next);
        else printf("%05d %d -1", v2[i].adress, v2[i].data);
    }
    return 0;
}

标签:25,结点,int,++,next,1110,v2,区块,first
From: https://www.cnblogs.com/Fare-well/p/16749811.html

相关文章

  • Total Sales of Supply Chain (25)
    题目描述Asupplychainisanetworkofretailers(零售商),distributors(经销商),andsuppliers(供应商)--everyoneinvolvedinmovingaproductfromsuppliertocusto......
  • 1105 链表合并——25分
    给定两个单链表L1=a1→a2→⋯→an−1→an和L2=b1→b2→⋯→bm−1→bm。如果n≥2m,你的任务是将⽐较短的那个链表逆序,然后将之并⼊⽐较⻓的那个链表,得到⼀个形如a1→a2......
  • day11leetcode232,225,20,1047
    225.用队列实现栈利用两个栈来实现队列的基本操作一个负责进栈一个负责出栈classMyQueue{Stack<Integer>stackIn;Stack<Integer>stackOut;publi......
  • 25.移动端像素比
    像素简介1.基本概念像素屏幕是由一个一个发光的小点构成,这一个个小点就是像素分辨率:1920x1080说的就是屏幕中小点的数量在前端开发中像素分成两种情况讨论,css像素......
  • 代码随想录第十一天 | 232.用栈实现队列、225. 用队列实现栈、20. 有效的括号、1047.
    第一题232.用栈实现队列请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):实现MyQueue类:voidpush(intx)将元素x推......
  • 2022-2023-1 20221325《计算机基础与程序设计》第五周学习总结
    班级链接:https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP作业要求:https://www.cnblogs.com/rocedu/p/9577842.html#WEEK05作业目标:学习计算机科学概论第6章和《C......
  • T258192 数字转换
    题目描述已知一个 nn 进制数,将其转为 mm 进制,请你编程完成这个任务。输入格式共三行,第一行是一个正整数,表示需要转换的数的进制n(2≤n≤16)n(2≤n≤16),第二行是......
  • T258193 低位与高位
    题目描述给出一个小于2^{32}232的正整数。这个数可以用一个3232位的二进制数表示(不足3232位用00补足)。我们称这个二进制数的前1616位为“高位”,后1616位为“低位”。将它......
  • 2022-09-25 反思
    摘要:记录周反思反思:现阶段对于Tianmu引擎功能的单元测试,集成测试都不完善,只有MTR的SQL句子的黑盒测试,而且现在MTR的SQL句子测试也不够完善。建议考虑开发Tianmu引擎......
  • 备库执行采集awr报告时,报错ORA-01110 ORA-01157
    系统:CentOS7.964位数据库:Oracle11.2.0.464位环境:rac(双节点)+dg问题描述:备库执行采集awr报告时,报错ORA-01110、ORA-01157,如下所示:press<return>tocontinue,otherw......