题目翻译:
有5个结点,输入第一个结点的地址,下面5行分别是结点的地址,数据域,next域,给这五个结点按数据域的大小从小到大排列,重新建立链表,输出有多少个有效的结点,和第一个结点的地址,然后输出各个结点的地址,数据域和next域
题解思路:
因为可能有不在链表中的结点,所以要先建立链表,然后排序输出
代码:
#include<bits/stdc++.h>
using namespace std;
const int max_l = 100010;
int v[max_l], n[max_l];
bool comp(int a, int b)
{
return v[a] < v[b];
}
int main()
{
int N, root;
cin >> N >> root;
for (int i = 0;i < N;i++)
{
int a, b, c;
cin >> a >> b >> c;
v[a] = b;
n[a] = c;
}
vector<int> real;
while (root != -1)
{
real.push_back(root);
root = n[root];
}
sort(real.begin(), real.end(), comp);
cout << real.size() << " ";
for (int i = 0;i < real.size();i++)
cout << setw(5) << setfill('0') << real[i] << endl << setw(5) << setfill('0') << real[i] << " " << v[real[i]] << " ";
cout << "-1";
}
坑点:
测试点4:可能是因为没建立链表,样例中还有链表外的数据