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

#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;
}

修改如下,供参考:

#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;
}