【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;
}
相关推荐
始三角龙17 小时前
LeetCode hoot 100 -- 最小覆盖子串
算法·leetcode·职场和发展
小年糕是糕手17 小时前
【C/C++刷题集】顺序表、vector、链表、list核心精讲
c语言·开发语言·数据结构·c++·算法·leetcode·蓝桥杯
会编程的土豆17 小时前
从 C/C++ 视角快速上手 Go 语言:核心差异与避坑指南
c语言·开发语言·c++·后端·golang
天上的光17 小时前
算法——概述
算法
水木流年追梦17 小时前
CodeTop Top 300 热门题目10-验证IP地址
python·网络协议·tcp/ip·算法·leetcode
样例过了就是过了17 小时前
LeetCode热题100 乘积最大子数组
c++·算法·leetcode·动态规划
minji...17 小时前
Linux 线程同步与互斥(六) 线程安全与重入问题,死锁,线程done
linux·运维·开发语言·数据库·c++·算法·安全
wayz1117 小时前
Day 16 编程实战:PCA主成分分析与技术指标降维
人工智能·算法·机器学习
探序基因17 小时前
单细胞转录组Seurat去批次-RPCA算法
算法
yuanyuan2o217 小时前
GDB 调试指南
c语言·c++·算法