/* 之前一直不重视链表 (好吧说实话主要是看着板子都是指针就怂了T.T) 这道题比较基础 应用了链表的思想 数组模拟指针 遇到的问题就是跑着跑着光标跳到前面或者跳到后面 我们用next储存每个点下一个点在哪 这样我们不仅能往开头和结尾插入 中间任意一个地方都ok、 这题数据范围题目描述小了 0.0 */ #include<iostream> #include<cstdio> #include<cstring> #define maxn 100010 using namespace std; int now,last,l,next[maxn]; char s[maxn]; int main() { while(scanf("%s",s+1)) { next[0]=0;//因为待会用到的next的部分会有赋值 所以不用memset一遍 l=strlen(s+1);now=last=0; for(int i=1;i<=l;i++) { if(s[i]=='['){now=0;continue;} if(s[i]==']'){now=last;continue;} next[i]=next[now];next[now]=i;//i插入now后面 if(now==last)last=i;now=i; } for(int i=next[0];i;i=next[i]) printf("%c",s[i]); printf(" "); } return 0; }