1105 链表合并
作者:互联网
代码
#include <iostream>
#include <cstdio>
#include <string>
using namespace std;
int a[100000];
string nxt[100000];
string p1[100000];
string p2[100000];
int main()
{
string addr1,addr2;
int n;
string address,naddress;
int data;
string f;
string f1,f2;
int len1=1,len2=1;
int tmp;
string tmpf;
string tmpf2;
cin>>addr1>>addr2;
cin>>n;
for(int i=0;i<n;i++){
cin>>address>>data>>naddress;
a[stoi(address)]=data;
nxt[stoi(address)]=naddress;
}
f=addr1;
while(nxt[stoi(f)]!="-1"){
p1[stoi(nxt[stoi(f)])]=f;
f=nxt[stoi(f)];
len1++;
}
f1=f;
f=addr2;
while(nxt[stoi(f)]!="-1"){
p2[stoi(nxt[stoi(f)])]=f;
f=nxt[stoi(f)];
len2++;
}
f2=f;
p1[stoi(addr1)]="-1";
p2[stoi(addr2)]="-1";
// tmpf2=addr2;
// while(nxt[stoi(tmpf2)]!="-1"){
// cout<<tmp<<" : "<<tmpf2<<" "<<a[stoi(tmpf2)]<<" "<<nxt[stoi(tmpf2)]<<endl;
// tmpf2=nxt[stoi(tmpf2)];
// }
// cout<<tmp<<" : "<<tmpf2<<" "<<a[stoi(tmpf2)]<<" "<<nxt[stoi(tmpf2)]<<endl;
// tmpf2=f2;
// while(p2[stoi(tmpf2)]!="-1"){
// nxt[stoi(tmpf2]=p2[stoi(tmpf2)];
// tmpf2=p2[stoi(tmpf2)];
// }
// nxt[stoi(tmpf2]=p2[stoi(tmpf2)];
if(len1>len2){
f=addr1;
tmp=2;
tmpf2=f2;
while(p2[stoi(tmpf2)]!="-1"){
nxt[stoi(tmpf2)]=p2[stoi(tmpf2)];
tmpf2=p2[stoi(tmpf2)];
}
nxt[stoi(tmpf2)]=p2[stoi(tmpf2)];
while(nxt[stoi(f2)]!="-1"){
if(tmp%3==0){
tmpf=f2;
f2=nxt[stoi(f2)];
nxt[stoi(tmpf)]=nxt[stoi(f)];
nxt[stoi(f)]=tmpf;
f=nxt[stoi(f)];
}
else{
f=nxt[stoi(f)];
}
tmp++;
}
while(tmp%3!=0){
f=nxt[stoi(f)];
tmp++;
}
nxt[stoi(f2)]=nxt[stoi(f)];
nxt[stoi(f)]=f2;
f=addr1;
}
else{
f=addr2;
tmp=2;
tmpf2=f1;
while(p1[stoi(tmpf2)]!="-1"){
nxt[stoi(tmpf2)]=p1[stoi(tmpf2)];
tmpf2=p1[stoi(tmpf2)];
}
nxt[stoi(tmpf2)]=p1[stoi(tmpf2)];
while(nxt[stoi(f1)]!="-1"){
// cout<<tmp<<" : "<<f<<" "<<a[stoi(f)]<<" "<<nxt[stoi(f)]<<endl;
if(tmp%3==0){
tmpf=f1;
f1=nxt[stoi(f1)];
nxt[stoi(tmpf)]=nxt[stoi(f)];
nxt[stoi(f)]=tmpf;
f=nxt[stoi(f)];
}
else{
f=nxt[stoi(f)];
}
tmp++;
// tmpf2=addr2;
// while(nxt[stoi(tmpf2)]!="-1"){
// cout<<tmp<<" : "<<tmpf2<<" "<<a[stoi(tmpf2)]<<" "<<nxt[stoi(tmpf2)]<<endl;
// tmpf2=nxt[stoi(tmpf2)];
// }
// cout<<tmp<<" : "<<tmpf2<<" "<<a[stoi(tmpf2)]<<" "<<nxt[stoi(tmpf2)]<<endl;
}
while(tmp%3!=0){
// cout<<tmp<<" : "<<f<<" "<<a[stoi(f)]<<" "<<nxt[stoi(f)]<<endl;
f=nxt[stoi(f)];
tmp++;
}
nxt[stoi(f1)]=nxt[stoi(f)];
nxt[stoi(f)]=f1;
f=addr2;
}
while(nxt[stoi(f)]!="-1"){
cout<<f<<" "<<a[stoi(f)]<<" "<<nxt[stoi(f)]<<endl;
f=nxt[stoi(f)];
}
cout<<f<<" "<<a[stoi(f)]<<" "<<nxt[stoi(f)]<<endl;
return 0;
}
标签:nxt,f2,string,合并,链表,while,1105,stoi,tmpf2 来源: https://www.cnblogs.com/wodeblog1982/p/16483007.html