花火ios 2021-09-25 23:30 采纳率: 100%
浏览 37
已结题

在删除单链表中x元素的结点,无法输入第二个字母,为什么

#include <stdio.h>
#include <stdlib.h>
typedef char ElemType;
typedef struct LNode
{
    ElemType data;
    struct LNode *next;
} LNode,*LinkList;
LinkList creat(LinkList L)//头插法建立
{
    LinkList s;
    printf("请选择输入的个数:\n");
    int i,n;
    char m;
    scanf("%d",&n);

    for(i=0; i<n; i++)
    {
        s=(LinkList)malloc(sizeof(LNode));
        s->next=NULL;
        scanf("%s",m);
        s->data=m;
        s->next=L->next;
        L->next=s;

    }
    return L;
}
void PrintList(LinkList L)
{
    LinkList p;
    p=L->next;
    printf("链表元素如下:\n");
    while(p!=NULL)
    {
        printf("%s ",p->data);
        p=p->next;
    }
    printf("\n");
}
void DeleteList(LinkList L)
{
    LinkList p,q;
    p=L->next;
    while(p!=NULL)
    {
        if(strcmp(p->data,"x")!=0)
            p=p->next;
        else
        {
            q=(LinkList)malloc(sizeof(LNode));
            q=p->next;
            p->data=p->next->data;
            p->next=q->next;
            free(q);            p=p->next;
        }
    }
    printf("\n");
}
int main()
{
    LinkList L;

    L=(LinkList)malloc(sizeof(LNode));
    L->next=NULL;
    L=creat(L);
    PrintList(L);
    printf("删除x的节点:\n");
    DeleteList(L);
    return 0;
}

  • 写回答

2条回答 默认 最新

  • qzjhjxj 2021-09-26 10:35
    关注

    修改见注释,供参考:

    #include <stdio.h>
    #include <stdlib.h>
    #include <malloc.h>
    #include <string.h>
    
    typedef char ElemType;
    typedef struct LNode
    {
        ElemType data;
        struct LNode* next;
    } LNode, * LinkList;
    
    void creat(LinkList L)//头插法建立,修改  LinkList creat(LinkList L)
    {
        LinkList s;
        printf("请选择输入的个数:\n");
        int i, n;
                                    //char m;修改
        scanf("%d", &n);
        for (i = 0; i < n; i++)
        {
            s = (LinkList)malloc(sizeof(LNode));
            s->next = NULL;
            getchar();            //修改,吸收缓冲区多余字符
            scanf("%c", &s->data);//scanf("%s", m);修改
                                  //s->data = m;修改
            s->next = L->next;
            L->next = s;
        }
                                 //return L;  修改
    }
    void PrintList(LinkList L)
    {
        LinkList p;
        p = L->next;
        printf("链表元素如下:\n");
        while (p != NULL)
        {
            printf("%c ", p->data);//printf("%s ",p->data);修改
            p = p->next;
        }
        printf("\n");
    }
    
    void DeleteList(LinkList L, ElemType x) //修改
    {
        LinkList p, q;
        q = L;
        p = L->next;
        while (p != NULL)
        {
            if (p->data == x) {//if (strcmp(p->data, "x") != 0)修改
                q->next = p->next; // p = p->next; 修改
            //else
            //{
            //    q = (LinkList)malloc(sizeof(LNode));
            //    q = p->next;
            //    p->data = p->next->data;
            //    p->next = q->next;
                free(p); //修改
                break;
            }   
            q = p;
            p = p->next;
        }
        printf("\n");
    }
    int main()
    {
        LinkList L;
        ElemType x;       //修改
        L = (LinkList)malloc(sizeof(LNode));
        L->next = NULL;
        creat(L);        //L = creat(L); 修改
        PrintList(L);
    
        printf("输入需要删除的节点元素 x:\n");//修改
        getchar();        //修改
        scanf("%c", &x);  //修改 
        DeleteList(L,x); //修改
        PrintList(L);
    
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月4日
  • 已采纳回答 9月26日
  • 创建了问题 9月25日

悬赏问题

  • ¥30 vmware exsi重置后的密码
  • ¥15 易盾点选的cb参数怎么解啊
  • ¥15 MATLAB运行显示错误,如何解决?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 UE5#if WITH_EDITOR导致打包的功能不可用
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题
  • ¥20 yolov5自定义Prune报错,如何解决?
  • ¥15 电磁场的matlab仿真
  • ¥15 mars2d在vue3中的引入问题