题目链接
刚复习完链表,正好做了道链表反转的题目,一遍过,开心~~
#include <bits/stdc++.h>
using namespace std;
int main(){
string head;
int N,K;
cin >> head >> N >> K;
map<string,pair<int,string>> list;
for(int i=0;i<N;i++){
string ad1,ad2;
int tmp;
cin >> ad1 >> tmp >> ad2;
list[ad1]=make_pair(tmp,ad2);
}
list["hhh"]=make_pair(0,"-1");//创建一个空的头结点,每次插入到头部
int cnt=0;
string pl=head,pr=head;
while(pr!="-1"){
cnt++;
if(cnt/K==1){
cnt=0;
string r=list[pr].second;
list[pr].second=list["hhh"].second;
list["hhh"].second=pl;
pl=pr=r;
}else{
pr=list[pr].second;
}
}
if(cnt!=0){
//说明最后有不足K个的
string cur=pl;
while(list[cur].second!="-1"){
cur=list[cur].second;
}
list[cur].second=list["hhh"].second;
list["hhh"].second=pl;
}
string p=list["hhh"].second;
while(p!="-1"){
cout << p << " " << list[p].first << " " << list[p].second << endl;
p=list[p].second;
}
return 0;
}