【PAT甲级真题】- Reversing Linked List (25)

题目来源

Reversing Linked List (25)

题目描述点击链接自行查看

注意点:

  • 是反转每 K 个元素,不是反转前 K 个
  • 地址补齐到 5 位输出

题目描述

Given a constant K and a singly linked list L, you are supposed to reverse the links of every K elements on L. For

example, given L being 1→2→3→4→5→6, if K = 3, then you must output 3→2→1→6→5→4; if K = 4, you must output

4→3→2→1→5→6.

输入描述:

Each input file contains one test case. For each case, the first line contains the address of the first node, a positive N

(<= 105) which is the total number of nodes, and a positive K (<=N) which is the length of the sublist to be reversed.

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 an integer, and Next is the position of the next node.

输出描述:

For each case, output the resulting ordered linked list. Each node occupies a line, and is printed in the same format as in the input.

输入例子:

复制代码
00100 6 4
00000 4 99999
00100 1 12309
68237 6 -1
33218 3 00000
99999 5 68237
12309 2 33218

输出例子:

复制代码
00000 4 33218
33218 3 12309
12309 2 00100
00100 1 99999
99999 5 68237
68237 6 -1

思路简介

静态链表模拟题

也是做过很多类似的题目了

把静态链表读到数组里面然后用 reverse 反转就行了

非常建议大家把静态链表存到数组里面去操作

直接模拟链表操作虽然说很规范而且工程肯定也会这么写

但是这是OI,怎么简单怎么写,能空间换时间就最好

因为我们只有三个小时,没时间写那么规范的模板了

就算写出来调 bug 指不定还要调好久

遇到的问题

  1. 只反转了前 K 个 wa 了一次

代码

cpp 复制代码
/**
 * https://www.nowcoder.com/pat/5/problem/4033
 * 模拟
 */
#include<bits/stdc++.h>
using namespace std;

const int N=1e6+10;
struct Node{
    int curr,v,next;
    
    Node():curr(0),v(0),next(0){}
    Node(int curr,int v,int next):curr(curr),v(v),next(next){}
}node[N];

void solve(){
    int head,n,k;
    cin>>head>>n>>k;
    for(int i=0;i<n;++i){
        int cu,v,ne;
        cin>>cu>>v>>ne;
        node[cu]={cu,v,ne};
    }
    vector<Node>res;
    int curr=head;
    while(curr!=-1){
        res.emplace_back(node[curr]);
        curr=node[curr].next;
    }
    int len=res.size();
    for(int i=0;i<len&&i+k<=len;i+=k)
        reverse(res.begin()+i,res.begin()+i+k);
    
    for(int i=0;i<len;++i){
        cout<<setfill('0')<<setw(5)<<res[i].curr<<' '<<res[i].v<<' ';
        if(i==len-1){
            cout<<"-1";
        }
        else {
            cout<<setfill('0')<<setw(5)<<res[i+1].curr<<'\n';
        }
    }
}

int main(){
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    //fstream in("in.txt",ios::in);cin.rdbuf(in.rdbuf());
    int T=1;
    //cin>>T;
    while(T--){
        solve();
    }
    return 0;
}
相关推荐
csdn_aspnet41 分钟前
C++ 3个有序点的方向(Orientation of 3 ordered points)
c++·算法
赤生云电竞1 小时前
GPU算力共享平台架构实践:任务分发与资源隔离的关键配置
算法·架构·gpu算力
小七在进步2 小时前
string的使用(2)
c++
青少儿编程课堂3 小时前
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:折半搜索优化子集枚举(Meet in the Middle)解析
c++·python·算法·bfs·信息学竞赛
wo_jack4 小时前
C++ 入门笔记(十七):list 入门 —— 为什么 list 不能 sort?
数据结构·c++·面试·stl·list
Oneshot5 小时前
DLX(Dancing Links)算法详解:求解数独最快的算法
算法
青少儿编程课堂5 小时前
蓝桥杯青少组图形化 + 全国青少年信息素养大赛 + 电子学会Scratch考级:校园连连看解析
c++·python·算法·bfs·信息学竞赛
kongdong5 小时前
Hikyuu | RSI均值回归交易策略实现
算法·均值算法·回归·量化交易·交易策略·hikyuu
小王C语言6 小时前
优选算法:分治-归并排序
算法
草莓熊Lotso6 小时前
【C++ 基于微服务的即时通讯系统】文件存储子服务实战:UUID生成、文件IO封装与全接口单元测试
开发语言·网络·数据库·c++·微服务·架构·单元测试