PAT甲级-1074 Reversing Linked List

题目

题目大意

给一个链表的头结点和总节点个数,以及k。每k个节点的链表都要翻转。

思路

链表可以用一个结构体数组来存储,先遍历一遍,过滤掉不在链表中的节点。然后将过滤好的节点放入res数组中,每k个元素用一次reverse(),最后再输出,注意要格式化输出。

代码

cpp 复制代码
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

struct node{
    int ads;
    int data;
    int next;
}v[100000];
int s, n, k;

int main(){
    cin >> s >> n >> k;
    for (int i = 0; i < n; i++){
        int ads;
        cin >> ads;
        v[ads].ads = ads;
        cin >> v[ads].data >> v[ads].next;
    }

    vector<node> res;
    for (int i = s; i != -1; i = v[i].next){
        res.push_back(v[i]);
    }
    if ((int)res.size() >= k){
        for (int i = 0; i + k <= (int)res.size(); i+=k){
            reverse(res.begin() + i, res.begin() + i + k);
        }
    }
    for (int i = 0; i < (int)res.size(); i++){
        printf("%05d %d ", res[i].ads, res[i].data);
        if (i != (int)res.size() - 1){
            printf("%05d\n", res[i + 1].ads);
        }else{
            cout << "-1" << endl;
        }
    }

    return 0;
}
相关推荐
曾几何时`6 小时前
C++——this指针
开发语言·c++
小冯的编程学习之路6 小时前
【C++】: C++基于微服务的即时通讯系统(1)
开发语言·c++·微服务
淀粉肠kk8 小时前
【C++】map和set的使用
c++
是苏浙9 小时前
零基础入门C语言之C语言实现数据结构之单链表经典算法
c语言·开发语言·数据结构·算法
纵有疾風起9 小时前
C++—vector:vecor使用及模拟实现
开发语言·c++·经验分享·开源·stl·vector
橘颂TA9 小时前
【剑斩OFFER】算法的暴力美学——点名
数据结构·算法·leetcode·c/c++
迷途之人不知返10 小时前
数据结构之,栈与队列
数据结构
MOONICK12 小时前
数据结构——哈希表
数据结构·哈希算法·散列表
爱凤的小光12 小时前
图漾GM461-E1相机专栏
c++
qwepoilkjasd13 小时前
C++智能指针介绍
c++