编辑代码

#include<stdio.h>
#include<malloc.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 + 1;
    }
    if (j == i)
        return(p->data);
    else
        return(NULL);
}

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