GitHub - jzplp/aoapc-UVA-Answer: 算法竞赛入门经典 例题和习题答案 刘汝佳 第二版
虽然这是一个链表题目,但是实际上并没有为每一个节点创建内存区域,而是用一个数组形式表示每个结点的后继。
AC代码
#include<cstdio>
#include<cstring>
using namespace std;
char sin[100005];
int next[100005];
int begin, end, pos;
int main() {
int i, j, n;
while(scanf("%s", sin+1) == 1) {
next[0] = 0;
pos = 0;
end = 0;
n = strlen(sin+1);
for(i = 1; i <= n; ++i) {
if(sin[i] == '[') {
pos = 0;
continue;
}
if(sin[i] == ']') {
pos = end;
continue;
}
next[i] = next[pos];
if(pos == end) {
end = i;
}
next[pos] = i;
pos = i;
}
for(i = next[0]; i != 0; i = next[i]) {
putchar(sin[i]);
}
putchar('\n');
}
return 0;
}