巨佬帮我看看哪里错了
查看原帖
巨佬帮我看看哪里错了
497275
trp_hy楼主2021/6/18 12:30

求助

(我没有输出最终结果,只是遍历了链表)

CODE:

#include <iostream>
using namespace std;

struct node{
	int num;
	int next;
	int prev;
}l[100005];
int head,tail;
int n,m,x,y,z,ans;

int main(){
	while(scanf("%d",&n)!=EOF){
		cin>>m;
		ans=0;
		head=1;
		tail=n;
		for(int i=1;i<=n;i++){
			l[i].num=i;
			if(i==1){
				l[i].next=i+1;
			}else if(i==n){
				l[i].prev=i-1;
			}else{
				l[i].prev=i-1;
				l[i].next=i+1;
			}
		}
		for(int i=1;i<=m;i++){
			cin>>x;
			if(x==1){
			    cin>>y>>z;
			    if(y==1){
			    	head=l[l[y].next].num;
				}else if(y==tail){
					tail=l[l[y].prev].num;
				}else if(z==1){
					head=l[y].num;
				}
		  		l[l[y].prev].next=l[y].num;
		  		l[l[y].next].prev=l[y].num;
		  		l[y].next=l[z].num;
		  		l[y].prev=l[l[z].prev].num;
		  		l[l[z].prev].next=l[y].num;
		  		l[z].prev=l[y].num;
			}else if(x==2){
				cin>>y>>z;
				if(y==1){
			    	head=l[l[y].next].num;
				}else if(y==tail){
					tail=l[l[y].prev].num;
				}else if(z==tail){
					tail=l[y].num;
				}
		  		l[l[y].prev].next=l[y].num;
		  		l[l[y].next].prev=l[y].num;
		  		l[y].prev=l[z].num;
		  		l[y].next=l[l[z].next].num;
		  		l[l[z].next].prev=l[y].num;
		  		l[z].next=l[y].num;
			}else if(x==3){
				cin>>y>>z; 
				if(y==head) head=l[z].num;
				else if(y==tail) tail=l[z].num;
				else if(z==head) head=l[y].num;
				else if(z==tail) tail=l[y].num;
	    		swap(l[y].next,l[z].next);
	    		swap(l[y].prev,l[z].prev);
			}else{
				for(int i=1;i<=n;i++){
					head=n-head+1;
					tail=n-tail+1;
                    swap(l[i].next,l[i].prev);
				}
			}
		}
		for(int i=head;i!=tail;i=l[l[i].next].num){
			cout<<l[i].num<<" ";
		}
	}
	return 0;
}

2021/6/18 12:30
加载中...