天梯赛 L2-022 重排链表
使用两个map记录每个地址对应的值和每个地址对应的下一个地址,然后模拟即可
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
typedef long long ll;
const int N = 3e5 + 10;
const int mod = 998244353;
void solve() {
string st;
int n;
cin>>st>>n;
map<string,int> value; //地址对应的值
map<string ,string> ne; //该地址的下一个地址
for(int i = 1 ; i <= n ; i++){
string address;
int data;
string next;
cin>>address>>data>>next;
value[address] = data;
ne[address] = next;
}
string now = st;
vector<pair<string,int>> ans;
while(now != "-1"){
ans.push_back({now,value[now]});
now = ne[now];
}
// for(int i = 0; i < ans.size() ; i++){
// cout<<ans[i].first<<" "<<ans[i].second<<endl;
// }
int l = 0,r = ans.size()-1;
vector<pair<string,int>> res;
while(l <= r){
if(l == r){
res.push_back({ans[l].first,ans[l].second});
l++;
r--;
}else{
res.push_back({ans[r].first,ans[r].second});
res.push_back({ans[l].first,ans[l].second});
l++;
r--;
}
}
int len = res.size();
res.push_back({"-1",-1});
for(int i = 0 ; i < len ; i++){
cout<<res[i].first<<" "<<res[i].second<<" "<<res[i+1].first<<endl;
}
}
signed main() {
// ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int tt = 1;
// cin >> tt;
while (tt--) {
solve();
}
return 0;
}