PAT 甲级 刷题日记|A 1133 Splitting A Linked List (25 分) 测试点四分析

negative 负的

positive 正的

思路

这道题考察静态链表的存储和遍历。每个节点顺序的调整并非严格的排序,而且要求保证稳定,所以自己手动实现比较合适。

此外,还要考虑一种情况,如下所示,即所给的N并不一定是链表的长度。

00100 4 10
100 4 101
101 -1 -1
102 11 103
103 10 -1

代码

#include 
using namespace std;

const int maxn = 100002;

struct node{
    int data;
    int next;
}Node[maxn];

struct newnode{
    int addr;
    int data;
    newnode(int a, int d): addr(a), data(d) {}
};
vector ori, aft;
int fir, n, k;


int main() {
    cin>>fir>>n>>k;
    for (int i = 0; i < n; i++) {
        int addr;
        cin>>addr;
        cin>>Node[addr].data;
        cin>>Node[addr].next;
    }
    int f = fir;
    while (f != -1) {
        ori.push_back(newnode(f, Node[f].data));
        f = Node[f].next;
    }
    for (int i = 0; i < ori.size(); i++) {
        if (ori[i].data < 0) aft.push_back(ori[i]);
    }
    for (int i = 0; i < ori.size(); i++) {
        if (ori[i].data <= k && ori[i].data >= 0) aft.push_back(ori[i]);
    }
    for (int i = 0; i < ori.size(); i++) {
        if (ori[i].data > k) aft.push_back(ori[i]);
    }
    for (int i = 0; i < ori.size(); i++) {
        printf("%05d %d ",aft[i].addr, aft[i].data);
        if (i != ori.size() - 1) printf("%05d\n", aft[i+1].addr);
        else printf("-1\n");
    }

}

你可能感兴趣的:(PAT 甲级 刷题日记|A 1133 Splitting A Linked List (25 分) 测试点四分析)