编辑代码

#include <stdio.h>
#include <stdlib.h> 
#define DATATYPE2 char
typedef struct node 
{
    DATATYPE2 data;
    struct node *next;
}LINKLIST;
LINKLIST *rcreate()
{
    LINKLIST *head, *last,*p;
    char ch;
    p=(LINKLIST *)malloc(sizeof (LINKLIST));
    head=p;
    last=p;
    p->next=NULL;
    while( (ch=getchar() )!='\n')
    {
        p=(LINKLIST*)malloc(sizeof(LINKLIST));
        p->data=ch;
        last->next=p;
        last=p;
        p->next=NULL;
    }
    return(head);
}
LINKLIST *hcreate()
{
    LINKLIST *head,*p;
    char ch;
    head=(LINKLIST *)malloc( sizeof( LINKLIST));
    head->next=NULL;
    while((ch=getchar() )!='\n')
    {
        p=(LINKLIST *)malloc( sizeof( LINKLIST));
        p->data=ch;
        p->next=head->next;
        head->next=p;
    }
    return(head);
}
LINKLIST *INITIATE()
{
    LINKLIST *head;
    head=(LINKLIST *)malloc(sizeof(LINKLIST));
    head->next=NULL;
    return(head);
}
int LENGTH( LINKLIST *head)
{
    int i;
    LINKLIST *p;
    p=head;
    i=0;
    while(p->next!=NULL)
    {
        p=p->next;
        i++;
    }
    return(i);
}
DATATYPE2 GET (LINKLIST *head,int i)
{
    int j;
    LINKLIST *p;
    j=0;
    p=head;
    while((j<i)&&(p->next!=NULL))
    {
        p=p->next;
        j=j+i;
    }
    if(j==i)
        return(p->data);
    else
        return(-1);
}
LINKLIST *LOCATE(LINKLIST *head,DATATYPE2 x)
{
    LINKLIST *p;
    p=head->next;
    while(p!=NULL&&p->data!=x)
        p=p->next;
    return(p);
}
void INSERT(LINKLIST *head,int i,DATATYPE2 x)
{
    int j;
    LINKLIST *h, *p;
    h=(LINKLIST *)malloc(sizeof(LINKLIST));
    h->data=x;
    h->next=NULL;
    p=head;
    j=0;
    while((p->next!=NULL)&&(j<i-1))
    {
        p=p->next;
        j=j+1;
    }
    if (j==i-1)
    {
        h->next=p->next;
        p->next=h;
    }
    else
        printf("insert fail");
}
void DELETE(LINKLIST *head,int i)
{
    int j;
    LINKLIST *p,*q;
    p=head;
    j=0;
    while((p->next!=NULL)&&(j<i-1))
    {
        p=p->next;
        j=j+1;
    }
    if ((p->next!=NULL)&&(j==i-1))
    {
        q=p->next;
        p->next=q->next;
        free(q);
    }
    else
        printf("delete fail");
}
int EMPTY (LINKLIST *head)
{
    if(head->next==NULL)
        return(1);
    else
        return(0);
}
void print(LINKLIST *head)
{
    LINKLIST *p;
    p=head->next;
    while(p!=NULL)
    {
        printf("%c",p->data);
        p=p->next;
    }
}
int main()
{
    LINKLIST *head,*p;
    char ch;
    head=hcreate();
    print(head);
    printf("\n");
    INSERT(head,1,'m');
    print(head);
    printf("\n");
    ch=GET(head,1);
    printf("%c",ch);
    printf("\n");
    p=LOCATE(head,'m');
    printf("%c",p->data);
    printf("\n");
    DELETE(head,1);
    print(head);
    printf("\n");
    printf("%d",LENGTH(head));
}