#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct s{
char data;
struct s *next;
struct s *prior;
}*LinkList,*LNode;
LinkList createList(){
LNode head;
head=(LinkList)malloc(sizeof(LinkList));
head->next=NULL;
return head;
}
LNode findTail(LinkList L){
LNode p=L;
while(p->next!=NULL){
p=p->next;
}
return p;
}
void insert(LNode &L,char temp){//在光标处插入
LNode p;
p=(LinkList)malloc(sizeof(LinkList));
p->data=temp;
if(L->next==NULL){
L->next=p;
p->prior=L;
p->next=NULL;
}//链表为空
else{
L->next->prior=p;
p->prior=L;
p->next=L->next;
L->next=p;
}
}
void Print(LinkList L){
LNode p=L->next;
while(p!=NULL){
printf("%c",p->data);
p=p->next;
}
}
void Adelete(LNode &p){
if(p->next==NULL){
p->prior->next=NULL;
free(p);
}
else{
p->next->prior=p->prior;
p->prior->next=p->next;
free(p);
}
}
int main(int argc, char *argv[])
{ char ch ;
char str[200];
scanf("%s",str);
int flag=1;
LinkList L =createList();
LNode gb=L,temp;
while((ch=getchar())!='\n'){
switch(ch){
case '[' : gb=L;
break;
case ']' : gb=findTail(L);
break;
case '{' : gb=gb->prior;
break;
case '}' : gb=gb->next;
break;
case '-' : flag=-flag;
break;
case '=' : temp=gb->prior;
Adelete(gb);
gb=temp;
break;
default:if(flag==1){
insert(gb,ch);
gb=gb->next;
}
else if(flag==-1){
gb=gb->next;
gb->data=ch;
}
break;
}
}
Print(L);
return 0;
}
我是根据这个题目的要求来写了一个双链表,然后利用gb表示光标实现各个符号的插入,可是有的时候能输出正确的结果,有的时候会输出乱码,有的时候不输出,这是怎么回事啊,不知道哪个代码块出现了问题,求大神解答!
比如这张图,就可以输出要求的结果,但是稍微添加几个字母就卡住无反应了