用数组实现链表。s[i]来代表节点,next[i]代表s[i]指向下一个的指针。用一个cur来指向目前操作的节点。同时这样做,还要用last来表示最后一个节点(END)功能使用。
受益匪浅
由于0是next[0],则最后接地的节点就是0。所以会使用i!=0来判断是否已经到地。
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=100005;
int last,cur,next[maxn];
char s[maxn];
int main (void)
{
while(scanf("%s",s+1)==1)
{
int n=strlen(s+1);
last=cur=0;
next[0]=0;
for(int i=1;i<=n;i++)
{
char ch=s[i];
if(ch=='[')
{
cur=0;
}
else if(ch==']')
{
cur=last;
}
else
{
next[i]=next[cur];//链表的方式“变换顺序”
next[cur]=i;
if(cur==last) last=i;//都到了最后一个了,要更新
cur=i;//后移
}
}
for (int i= next[0];i!=0;i=next[i]) //为什么i最后指向0?
{
printf("%c",s[i]);
}
printf("\n");
}
return 0;
}