【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;
}
相关推荐
先吃饱再说6 小时前
判断回文字符串,从一行代码到双指针优化
算法
见过夏天6 小时前
C++ 基础入门完全指南
c++
黄敬峰9 小时前
深入理解算法核心:从递归思想、数组扁平化到快速排序
算法
得物技术10 小时前
从狂野代码到按目标生产:得物推荐 AI Harness 的工程化实践|AICon 演讲整理
人工智能·算法·架构
AI小老六13 小时前
SkillOpt 架构拆解:把 Skill 文本当参数,用执行轨迹训练 Agent
后端·算法·ai编程
胡萝卜术14 小时前
从“分数打架”到“排名投票”:为什么你的ChatBI必须用RRF?
算法·设计模式·面试
Asize15 小时前
初识DFS 与 BFS:递归、队列与图遍历
算法
罗西的思考1 天前
机器人 / 强化学习】HIL-SERL:人类在环驱动的具身智能进化框架
人工智能·算法·机器学习
CSharp精选营1 天前
关系型 vs 非关系型:从原理到选型,一文搞定数据库核心分类
数据结构·nosql·关系型数据库·非关系型数据库·技术选型