以結(jié)構(gòu)體數(shù)組來(lái)模擬鏈表,通過(guò)賦值index然后排序來(lái)確定先后順序锅论,輸出的時(shí)候注意鏈表斷裂的情況如何處理
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> p;
const int maxn = 100005;
const int INF = 0x3f3f3f3f;
int i, j, n, x, cnt1 = 0, cnt2 = 0, cnt, addr, flag[maxn] = {0};
struct node
{
int value;
int adr;
int next;
int num;
bool operator < (const node &y) const
{
return num < y.num;//通過(guò)以index排序來(lái)確定鏈表(結(jié)構(gòu)體)的先后順序
}
}a[maxn];
int main()
{
cin>>addr>>n;
for(i = 0; i < maxn; i++)
{
a[i].num = 2 * maxn;
}
for(i = 0; i < n; i++)
{
cin>>x;
a[x].adr = x;
cin>>a[x].value>>a[x].next;
}
for(i = addr; i != -1; i = a[i].next)
{
int t = abs(a[i].value);
if(!flag[t])
{
flag[t] = 1;
a[i].num = cnt1;
cnt1++;
}
else
{
a[i].num = maxn + cnt2;
cnt2++;
}
}
sort(a, a+maxn);
int cnt = cnt1 + cnt2;
for(i = 0; i < cnt; i++)
{
if(i != cnt1-1 && i != cnt-1)
printf("%05d %d %05d\n", a[i].adr, a[i].value, a[i+1].adr);//因?yàn)橹虚g會(huì)去掉重復(fù)的药薯,所以next輸出的是下一項(xiàng)的地址饿序,避免鏈表斷裂
else
printf("%05d %d -1\n", a[i].adr, a[i].value);.//兩個(gè)鏈表的最后一項(xiàng)一定為-1
}
return 0;
}