题目:
你在输入文章的时候,键盘上的Home键和End键出了问题,会不定时的按下。
给你一段按键的文本,其中'['表示Home键,']'表示End键,输出这段#include<iostream>
#include#include #include using namespace std;int next[1000],cur=0,last;int main(){ /*模拟链表 有点难以理解 */ char s[1000]; scanf("%s",s+1); for(int i=1; i<=strlen(s+1); i++) { if(s[i]=='[') cur=0; else if(s[i]==']') cur=last; else { next[i]=next[cur]; next[cur]=i; /* 这两句是重点 i 为新节点 cur 可视为浮标节点 next[i] 为新节点的 下一节点的“指针”(并不是下一节点的指针,而是i节点中保存的下一节点的指针,下方同理); next[cur] 为浮标节点的下一节点的“指针” 那么就是让新节点的“下一个节点的指针”指向浮标指针的指向的节点 然后浮标节点的“下一节点的“指针“” 指向 i 节点 由此,完成新节点的插入 此时i 节点在浮标节点后 ,因此利用下方的 cur =i; 使新节点变成浮标节点 顺序不能反,结合说明看图理解 */ if(last == cur ) last =i;//如果浮标节点是尾节点,那么更新尾节点;
} } for(int i=next[0]; i!=0; i=next[i])//依次访问节点 printf("%c",s[i]);}
核心就是 next[i]=next[cur]相当于指针创建中的 p->next=*L->next;(一个是让next[i]=0,一个是让p->next=NULL) next[cur]=i 相当于指针创建中的 *L->next=p;(一个让cur->i 一个让L的next->p)(这段来源于)