2017年pat乙级秋考链表元素分类 25分

55 阅读1分钟

1075 链表元素分类 - PAT (Basic Level) Practice (中文) (pintia.cn)

#include<bits/stdc++.h>
using namespace std;

vector<int>v[3];
struct Node
{
    int data;
    int next;
}node[100005];
int main()
{


//输入链表部分
int head, n, k, a;
scanf("%d%d%d", &head, &n, &k);


//用a来存放下一个节点的地址,node[a]就可以访问该地址的节点的数据和下一个节点的地址了
for (int i = 0; i < n; i++) {
    scanf("%d", &a);  
    scanf("%d%d", &node[a].data, &node[a].next); //对应节点的数据和下一个节点的地址
}


//生成链表
    //vector存放地址   node[vector]就可以访问该地址的数据和下一个节点的地址了
    int tail = head;
    while (tail != -1) {
        int data = node[tail].data;
        if (data < 0)
            v[0].push_back(tail);
        else if (data >= 0 && data <= k)
            v[1].push_back(tail);
        else
            v[2].push_back(tail);
        tail = node[tail].next;
    }


//顺序输出
  int flag = 0;
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < v[i].size(); j++) {
            if (flag == 0) {
                printf("%05d %d ", v[i][j], node[v[i][j]].data);
                flag = 1;
            }
            else {
                printf("%05d\n%05d %d ", v[i][j], v[i][j], node[v[i][j]].data);
            }
        }
    }
    printf("-1");
return 0;
}