#includeusing namespace std;const int maxn=1e5+5;int cur, last, next[maxn];//last维护光标移动前的位置,cur维护待处理节点的前继节点char str[maxn];int main(){ while(~scanf("%s",str+1)){ int len=strlen(str+1); last=cur=0; next[0]=0; for(int i=1;i<=len;++i){ if(str[i]=='[') cur=0;//遇到'['把cur指到链表首部(0) else if(str[i]==']') cur=last;//遇到']'把cur指到last else { next[i]=next[cur];next[cur]=i;//先把i和cur后一个节点连接,再把cur和i连接 if(cur==last) last=i;//未移动光标时,每次插入新数据,都要更新last cur=i; } } for(int i=next[0];i!=0;i=next[i]) putchar(str[i]); puts(""); } return 0;}/*This_is_a_[Beiju]_text[[]][][]Happy_Birthday_to_Tsinghua_University*/
本题用数组实现链表