其他分享
首页 > 其他分享> > 1105 链表合并

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