changkong96 2021-05-16 10:12 采纳率: 66.7%
浏览 23
已采纳

不知道程序出现了什么问题?但是输入和输出就是有问题

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct node{
    char ch;
    struct node *link;
}Node;
Node *creat(int n)
{
    int i;
    Node *head,*p1,*p2;
    for(i=0;i<n;i++)
    {
        p1=(Node *)malloc(sizeof(Node));
        printf("输入第%d个节点:",i+1);
        scanf("%c",&p1->ch);
        if(i==0) head=p1;
        else p2->link=p1;
        p2=p1;
    }
    p2->link=NULL;
    return (head);
}
Node *del(Node *head,char ch)
{
    Node *p1,*p2;
    while(head->ch==ch)
    {
        p1=head;
        head=head->link;
        free(p1);
    }
    p2=head;
    while(p2->link!=NULL)
    {
        p1=p2->link;
        if(p1->ch==ch)
        {
            p2->link=p1->link;
            free(p1);
        }
        else 
        { 
            p2=p1;
        }
    }
    return (head);
}
int main()
{
    Node *head,*p1;
    int n;
    char ch;
    printf("请输入节点数量:\n");
    scanf("%d",&n);
    head=creat(n);
    printf("请输入要删除的字符:\n");
    scanf("%c",&ch);
    head=del(head,ch);
    p1=head;
    if(p1==NULL)
        printf("空链表\n");
    else 
        do
        {
            printf("%c",p1->ch);
            p1=p1->link;
        }while(p1!=NULL);
return 0;
}

  • 写回答

1条回答 默认 最新

  • qzjhjxj 2021-05-16 17:02
    关注

    修改如下,供参考:

    #include<stdio.h>
    #include<malloc.h>
    #include<stdlib.h>
    typedef struct node{
        char ch;
        struct node *link;
    }Node;
    
    Node *creat(int n)
    {
        int i;
        Node *head,*p1,*p2;
        for(i=0;i<n;i++)
        {
            p1=(Node *)malloc(sizeof(Node));
            printf("输入第%d个节点:",i+1);
            fflush(stdout);rewind(stdin);
            scanf("%c",&p1->ch);
            if(i==0) head=p1;
            else p2->link=p1;
            p2=p1;
        }
        p2->link=NULL;
        return (head);
    }
    
    Node *del(Node *head,char ch)
    {
        Node *p1,*p2;
        if(head->ch == ch)//while(head->ch==ch)
        {
            p1=head;
            head=head->link;
            free(p1);
            return (head);
        }
        p2=head;
        while(p2->link!=NULL)
        {
            p1=p2->link;
            if(p1->ch==ch)
            {
                p2->link=p1->link;
                free(p1);
            }
            else 
            { 
                p2=p1;
            }
        }
        return (head);
    }
    int main()
    {
        Node *head,*p1;
        int n;
        char ch;
        printf("请输入节点数量:\n");
        scanf("%d",&n);
        head=creat(n);
    
        printf("请输入要删除的字符:\n");
        fflush(stdout);rewind(stdin);
        scanf("%c",&ch);
        head=del(head,ch);
    
        p1=head;
        if(p1==NULL)
            printf("空链表\n");
        else 
            do
            {
                printf("%c",p1->ch);
                p1=p1->link;
            }while(p1!=NULL);
        
        return 0;
    }
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 Opencv配置出错
  • ¥15 模电中二极管,三极管和电容的应用
  • ¥15 关于模型导入UNITY的.FBX: Check external application preferences.警告。
  • ¥15 气象网格数据与卫星轨道数据如何匹配
  • ¥100 java ee ssm项目 悬赏,感兴趣直接联系我
  • ¥15 微软账户问题不小心注销了好像
  • ¥15 x264库中预测模式字IPM、运动向量差MVD、量化后的DCT系数的位置
  • ¥15 curl 命令调用正常,程序调用报 java.net.ConnectException: connection refused
  • ¥20 关于web前端如何播放二次加密m3u8视频的问题
  • ¥15 使用百度地图api 位置函数报错?