当前位置: 首页 > article >正文

PAT甲级-1133 Splitting A Linked List

题目

题目大意

给定一个链表的首节点地址和节点个数,以及一个数k。要求重新排列该链表,使其按<0 ,>= 0 && <= k,>k 的顺序排序。但是不改变原有顺序,比如-4 -> -6 -> -2,不需要再内部排序为-6 -> -4 -> -2。

思路

先遍历一遍链表,过滤掉无效节点,然后将元素按类别分别存放在3个数组中,最后再依次输出这3个数组。但是最后一个测试点发生段错误。所以我将这3个数组又合为一个数组输出。

代码

#include <iostream>
#include <vector>
using namespace std;

struct node{
    int ads;
    int data;
    int next;
}v[100001];
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> range1;  // 负数范围
    vector<node> range2;  // 0到k
    vector<node> range3;  // 大于k
    for (int i = s; i != -1; i = v[i].next){
        if (v[i].data < 0){
            range1.push_back(v[i]);
        }else if (v[i].data <= k){
            range2.push_back(v[i]);
        }else{
            range3.push_back(v[i]);
        }
    }
    vector<node> res;  // 将3个数组合到一个数组中再输出,如果按照下面的注释代码分别输出,测试点4段错误
    for (int i = 0; i < (int)range1.size(); i++){
        res.push_back(range1[i]);
    }
    for (int i = 0; i < (int)range2.size(); i++){
        res.push_back(range2[i]);
    }
    for (int i = 0; i < (int)range3.size(); i++){
        res.push_back(range3[i]);
    }

    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{
            printf("-1\n");
        }
    }
    /*for (int i = 0; i < (int)range1.size(); i++){
        printf("%05d %d ", range1[i].ads, range1[i].data);
        if (i != (int)range1.size() - 1){
            printf("%05d\n", range1[i + 1].ads);
        }else{
            if ((int)range2.size() == 0 && (int)range3.size() == 0){
                printf("-1\n");
                return 0;
            }
            printf("%05d\n", range2[0].ads);
        }
    }
    for (int i = 0; i < (int)range2.size(); i++){
        printf("%05d %d ", range2[i].ads, range2[i].data);
        if (i != (int)range2.size() - 1){
            printf("%05d\n", range2[i + 1].ads);
        }else{
            if ((int)range3.size() == 0){
                printf("-1\n");
                return 0;
            }
            printf("%05d\n", range3[0].ads);
        }
    }
    for (int i = 0; i < (int)range3.size(); i++){
        printf("%05d %d ", range3[i].ads, range3[i].data);
        if (i != (int)range3.size() - 1){
            printf("%05d\n", range3[i + 1].ads);
        }else{
            printf("-1\n", range3[0].ads);
        }
    }*/

    return 0;
}


http://www.kler.cn/a/375801.html

相关文章:

  • Crash日志查找与分析
  • 汽车车辆控制单元SRAM存储解决方案
  • 38.第二阶段x86游戏实战2-HOOK窗口消息机制(解决多开窗口句柄问题)
  • 修改ruoyi的logo和标题
  • mybatis 参数判断报错的问题
  • 了解SQLExpress数据库
  • Chromium 中chrome.topSites扩展接口定义c++
  • Unity中有什么情况下是需要用UniTask替代其他异步方式的吗?
  • kdd比赛方案
  • C++【string的模拟实现】
  • Llama 3.2 Vision Molmo:多模态开源生态系统基础
  • 《双指针篇》---移动零
  • 「Mac畅玩鸿蒙与硬件20」鸿蒙UI组件篇10 - Canvas 组件自定义绘图
  • Spring Boot 与 Vue 共筑电影院选票新体验
  • Kong Gateway 指南
  • HTML 基础标签——链接标签 <a> 和 <iframe>
  • Javaweb 实验4 xml
  • 国内百家SRC平台
  • 20241102解决荣品PRO-RK3566开发板刷Rockchip原厂的Buildroot使用荣品的DTS出现
  • Vue基础知识——async指令、scope和样式穿透
  • Maven(20) 如何使用Maven进行版本管理?
  • npm入门教程18:npm发布npm包
  • CVPR2024:完全测试时域适应​​​​(Test-time Adaptation)的目标检测
  • [实战-12] flinkSql 时间属性
  • 互联网技术比游戏后端技术领先十年吗?
  • Android Pair