我写的这个代码有点问题,求大神指教啊,编译能通过,但是结果不对。。
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>



typedef struct LNode
{
    char data;
    struct LNode *next;
}LNode,*Linklist;

Linklist creatlist()
{
    Linklist head,p;
    char ch;
    head=(Linklist)malloc(sizeof(LNode));
    head->next=NULL;
    scanf("%c",&ch);
    while(ch!='\n')
    {
        p=(Linklist)malloc(sizeof(LNode));
        p->data=ch;
        p->next=head->next;
        head->next=p;
        scanf("%c",&ch);
    }
    return head;
}
Linklist findlist(Linklist head,int k)
{
    Linklist p=head;
    int m=0;
    while(p!=NULL&&m<k)
    {
        p=p->next;
        m++;
    }
    return p;
}

int length(Linklist head)
{
    int j=0;
    Linklist p;
    p=head->next;
    while(p!=NULL)
    {
        p=p->next;
        j++;
    }
    return (j);
}
void insertlist(Linklist head,int i,char x)
{
    Linklist p,q;
    if(i<0||i>length(head))
        printf("Error!!");
    else
        {
            p=findlist(head,i-1);
            q=(Linklist)malloc(sizeof(LNode));
            q->data=x;
            q->next=p->next;
            p->next=q;
        }
}
void deletelist(Linklist head,int i)
{
    Linklist p=head->next,q;
    if(i<1||i>length(head))
        printf("Error!!");

        p=findlist(head,i-1);
        q=p->next;
        p->next=q->next;
        free(q);

}
void printlist(Linklist head)
{
    Linklist p=head->next;
    printf("\nhead-->");
    while(p!=NULL)
    {
        printf("%c",p->data);
        p=p->next;
    }
    printf("-->end");
}
void main()
{
    int l;
    Linklist h,p;
    h=creatlist();
    printlist(h);
    l=length(h);
    printf("链表的长度为:%d\n",l);
    insertlist(h,5,'c');
    printlist(h);
    l=length(h);
    printf("链表的长度为:%d\n",l);
    p=findlist(h,5);
    printf("找到的元素为:%d\n",p->data);
    deletelist(h,4);
    printlist(h);
    l=length(h);
    printf("链表的长度为:%d\n",l);
}