weixin_45230280 2020-10-31 17:36 采纳率: 100%
浏览 29

C语言这道题双链表有时候输出正确的结果有时候输出不了结果怎么回事

#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表示光标实现各个符号的插入,可是有的时候能输出正确的结果,有的时候会输出乱码,有的时候不输出,这是怎么回事啊,不知道哪个代码块出现了问题,求大神解答!

图片说明比如这张图,就可以输出要求的结果,但是稍微添加几个字母就卡住无反应了
图片说明

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥40 复杂的限制性的商函数处理
    • ¥15 程序不包含适用于入口点的静态Main方法
    • ¥15 素材场景中光线烘焙后灯光失效
    • ¥15 请教一下各位,为什么我这个没有实现模拟点击
    • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
    • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
    • ¥20 有关区间dp的问题求解
    • ¥15 多电路系统共用电源的串扰问题
    • ¥15 slam rangenet++配置
    • ¥15 有没有研究水声通信方面的帮我改俩matlab代码