這道例題涉及了一些單向鏈表的用法,
第一,單向鏈表在記錄的時候,只考慮他後面是誰,那麼第一個數怎麼辦呢,
通過虛設初始 next[0] 來存第一位,而什麼時候在最後一位即nex[pos] = 0的時候
第二,數字字母需要學會看成一題,即在寫鏈表的時候,用數字代替字母
代碼如下
#include <bits/stdc++.h>
using namespace std;
const int MA = 1e5 + 5;
char s[MA];
int nex[MA];
int main()
{
while (scanf("%s",s+1) == 1)
{
memset(nex,0,sizeof(nex));
int n = strlen(s+1),pos = 0,wend = 0,k = 0;
//pos表示位置,wend表示末位對應的數字
for (int i = 1; i <= n; i++)
{
if(s[i] == '[') pos = 0;
else if(s[i] == ']') pos = wend;
else{
nex[i] = nex[pos];
nex[pos] = i;//它的下一位
pos = i;
if (nex[pos] == 0) wend = pos;
}
}
while(nex[k])
{
printf("%c",s[nex[k]]);
k = nex[k] ;
}
printf("\n");
}
}