首页 > 技术文章 > codevs 4650 破损的键盘(链表)

yanlifneg 2016-06-30 20:04 原文

/*
之前一直不重视链表 (好吧说实话主要是看着板子都是指针就怂了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("\n");
      }
    return 0;
}

 

推荐阅读