求助
(我没有输出最终结果,只是遍历了链表)
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;
}