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