题意:
给出N个结点的地址address、数据域data以及指针域next,然后给出链表的首地址,要
求把在这个链表上的结点按data值从小到大输出。
样例解释:
按照输入,这条链表是这样的(结点格式为[address, data, next]):
[00001, 0, 22222]→[22222, 1000, 12345]→[12345, -1, 33333]→[33333, 100000, 11111]→[11111,100, -1]
按key值排序之后得到:
[12345, -1, 00001]→[00001, 0, 11111]→[11111, 100, 22222]→[22222, 1000, 33333]→[33333,100000, -11
此处可以直接套用前面讲解的一般解题步骤。
步骤1:定义静态链表,其中结点性质由bool型变量flag定义,表示为结点在链表中是
否出现。flag为false表示无效结点(不在链表上的结点)。

步骤2:初始化,令flag均为false(即0),表示初始状态下所有结点都是无效结点。

步骤3:由题目给出的链表首地址begin遍历整条链表,并标记有效结点的flag为true(即1),同时计数有效结点的个数count。

步骤4:对结点进行排序,排序函数cmp的排序原则是:如果cmp的两个参数结点中有无效结点的话。则 按flag大到小排序,以把有效结点排到数组左端(因为有效结点的flag为1,大于无效结点的flag),否则按数据域从小到大排序(第二级条件)。

步骤5:由于有效结点已经按照数据域从小到大排序,因此按要求输出有效结点即可.

注意点
1.可以直接使用 % 05d的输出格式,以在不足五位时在高位补0。但是要注意 - 1不能使用 % 05d输出,否则会输出 - 0001(而不是 - 1或者 - 00001),因此必须要留意 - 1的输出。
2.题目可能会有无效结点,即不在题目给出的首地址开始的链表上。
3.数据里面还有均为无效的情况,这时就要根据有效结点的个数特判输出”0 - 1”。

#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = 100005;
struct Node {
int data;
int next;
int address;
bool flag;//判断节点是否在链表上。
}node[maxn];
bool cmp(Node a, Node b) {
if (a.flag == 0 || b.flag == 0) {
return a.flag > b.flag;
}
else {
return a.data < b.data;
}
}
int main() {
for (int i = 0; i < maxn; i++) {//初始化
node[i].flag = false;
}
int n, s, address;
scanf("%d%d", &n, &s);
for (int i = 0; i < n; i++) {
scanf("%d", &address);
scanf("%d%d", &node[address].data, &node[address].next);
node[address].address = address;
}
int count = 0,p = s;
while (p !=-1) {
node[p].flag = true;//进行标记
count++;//记录有效节点的个数。
p = node[p].next;
}
if (count == 0) {
printf("0 -1");
}
else {
sort(node, node + maxn, cmp);
printf("%d %05d\n", count, node[0].address);//先输出链表元素个数,再输出第一个节点的位置
for (int i = 0; i < count; i++) {
if (i != count - 1) {
printf("%05d %d %05d\n",node[i].address, node[i].data, node[i + 1].address);//第三个位置是下一个元素的地址
}
else {//如果是最后一个元素则将其下一个节点的位置输出为“-1”,防止-1被%05d化。
printf("%05d %d -1\n", node[i].address, node[i].data);
}
}
}
return 0;
}

PAT A1052 Linked List Sorting的更多相关文章

  1. PAT A1052 Linked List Sorting (25 分)——链表,排序

    A linked list consists of a series of structures, which are not necessarily adjacent in memory. We a ...

  2. PAT 1052 Linked List Sorting [一般]

    1052 Linked List Sorting (25 分) A linked list consists of a series of structures, which are not nece ...

  3. Pat 1052 Linked List Sorting (25)

    1052. Linked List Sorting (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue A ...

  4. PAT甲级——A1052 Linked List Sorting

    A linked list consists of a series of structures, which are not necessarily adjacent in memory. We a ...

  5. A1052. Linked List Sorting

    A linked list consists of a series of structures, which are not necessarily adjacent in memory. We a ...

  6. PAT 1052. Linked List Sorting

    这场考试当年还参加了,当时直接用内置的排序了,否则自己写归并排序浪费时间啊,现在来练习一发.估计又有些节点没在链表里面,当时没考虑这个情况,所以一直有些case没过 #include <iost ...

  7. PAT 解题报告 1052. Linked List Sorting (25)

    1052. Linked List Sorting (25) A linked list consists of a series of structures, which are not neces ...

  8. 【PAT】1052 Linked List Sorting (25)(25 分)

    1052 Linked List Sorting (25)(25 分) A linked list consists of a series of structures, which are not ...

  9. PAT 甲级 1052 Linked List Sorting (25 分)(数组模拟链表,没注意到不一定所有节点都在链表里)

    1052 Linked List Sorting (25 分)   A linked list consists of a series of structures, which are not ne ...

随机推荐

  1. 4. Vue基本指令

    目录 1. v-on指令 2. v-if指令 3. v-show指令 4. v-for指令 5. v-model指令 一. v-on指令 1. 基础用法 v-on是事件监听的指令, 下面来看简单用法 ...

  2. 用OkHttpGo和FastJson获取OneNET云平台数据(解析嵌套数组)

    JSON数据格式有两种,一种是 { } 大括号表示的JSON对象,一种是 [ ] 中括号表示的JSON数组.从OneNET获取到的数组是这样的,并用Json解析网址查看https://jsonform ...

  3. Vuex入门、同步异步存取值进阶版

    关注公众号查看原文: 1. vueX介&绍安装 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方 ...

  4. Java基本概念:方法

    一.简介 描述: Java中方法是语句的集合,它们在一起执行一个功能. 方法是解决一类问题的步骤的有序组合,它在类中定义,属于类的成员,包含于类或对象中. 方法在程序中被创建后,在其他使用了该方法的地 ...

  5. lombok插件@Slf4j注解不生效问题解决办法

    最近在尝试使用日志工具Sfl4j,当时使用log时报错,找了好久才解决这个问题. 1.首先需要下载Lombok插件 File->settings->Plugins 搜索Lombok,点击安 ...

  6. 共享内存与存储映射(mmap)

    [前言]对这两个理解还是不够深刻,写一篇博客来记录一下. 首先关于共享内存的链接:共享内存.里面包含了创建共享内存区域的函数,以及两个进程怎么挂载共享内存通信,分离.释放共享内存. 共享内存的好处就是 ...

  7. Windows 环境下搭建 RocketMQ

    Apache 官网: http://rocketmq.apache.org/ RocketMQ 的 Github 地址: English:https://github.com/apache/rocke ...

  8. 大话Spark(5)-三图详述Spark Standalone/Client/Cluster运行模式

    之前在 大话Spark(2)里讲过Spark Yarn-Client的运行模式,有同学反馈与Cluster模式没有对比, 这里我重新整理了三张图分别看下Standalone,Yarn-Client 和 ...

  9. 基于Hi3559AV100的视频采集(VDEC-VPSS-VO)整体框图设计

    下面给出基于Hi3559AV100的视频采集整体设计,具体设计将在后续给出: 图形采集端整体设计 Hi3559AV100软件程序按结构划分可分为4层,第一层是硬件驱动层,第二层是操作系统层,第三层是媒 ...

  10. AI在出行场景的应用实践:路线规划、ETA、动态事件挖掘…

    ​前言:又到春招季!作为国民级出行服务平台,高德业务快速发展,大量校招/社招名额开放,欢迎大家投递简历,详情见文末.为帮助大家更了解高德技术,我们策划了#春招专栏#的系列文章,组织各业务团队的高年级同 ...