链表的头跟尾的删除与添加要特判
链表为空要特判
pool的pt位置与后面要对应
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
#includeusing namespace std;int readint(){ int ans=0,f=1; char c=getchar(); while(!(c>='0'&&c<='9')){ if(c=='-') f=-1; c=getchar(); } while(c>='0'&&c<='9'){ ans=ans*10+c-'0'; c=getchar(); } return f*ans;}const int maxn=23009;struct node{ int w; node*nt,*rd; node():w(0),nt(NULL),rd(NULL){} node(int W):w(W),nt(NULL),rd(NULL){}}x[maxn],*head,*tail,*pt=x;int n,m,k,num;int W;void add(){ pt->w=W; pt->nt=pt->rd=NULL; if(head==NULL) tail=head=pt; else{ tail->nt=pt; tail=pt; } pt++;}void init(){ head=tail=NULL;}int main(){ init(); n=readint();m=readint();k=readint();num=readint(); for(int i=0;i nt){ if(!W){ if(t==head) head=head->nt; else pre->nt=t->nt; for(int i=0;i w=W; if(pos==0){ pt->nt=head; head=pt; if(tar==-1) pt->rd=NULL; else for(node*tmp=head;;tar--,tmp=tmp->nt){ if(!tar){ pt->rd=tmp; break; } } }else for(t=head,pre=head;;pos--,pre=t,t=t->nt){ if(!pos){ pre->nt=pt; pt->nt=t; if(tar==-1) pt->rd=NULL; else for(node*tmp=head;;tar--,tmp=tmp->nt){ if(!tar){ pt->rd=tmp; break; } } break; } } } node*T=head; for(;;num--,T=T->nt){ if(!num) break; } for(t=T;t!=NULL;t=t->nt){ printf("%d",t->w); printf(t->nt==NULL?" -1\n":" "); } for(t=T;t!=NULL;t=t->rd){ printf("%d",t->w); printf(t->rd==NULL?" -1\n":" "); } if(T==NULL) printf("-1\n-1\n"); return 0;}