#include "stdio.h"
#define OK 1
#define ERROR 0;
#define TRUE 0;
#define FALSE 0;
typedef int Status;
typedef int ElemType;
typedef struct Node
{
ElemType data;
struct Node *next;
} Node,*LinkList;
Status visit(ElemType c)
{
printf("%d ",c);
return OK;
}
Status ListTraverse(LinkList L)
{
LinkList p=L->next;
while(p)
{
visit(p->data);
p = p->next;
}
printf("\n");
return OK;
}
int ListLength(LinkList L)
{
int length=0;
LinkList p=L->next;
while(p)
{
++length;
p=p->next;
}
return length;
}
Status InitList(LinkList *L)
{
*L=(LinkList)malloc(sizeof(Node));
if(!(*L)) return ERROR;
(*L)->next=NULL;
return OK;
}
Status CreateListHead(LinkList *L,int n)
{
LinkList p;
int i;
srand(time(0));
*L=(LinkList)malloc(sizeof(Node));
(*L)->next=NULL;
for( i=0; i<n; i++)
{
p=(LinkList)malloc(sizeof(Node));
p->data=rand(0)%100+1;
p->next=(*L)->next;
(*L)->next=p;
}
return OK;
}
Status CreateListTail(LinkList *L,int n)
{
LinkList p,r;
srand(time(0));
*L=(LinkList)malloc(sizeof(Node));
r=*L;
int i;
for( i=0; i<n; i++)
{
p=(Node *)malloc(sizeof(Node));
p->data=rand(0)%100+1;
r->next=p;
r=p;
}
r->next=NULL;
}
Status ListInsert(LinkList *L,int i,ElemType e)
{
LinkList p,s;
int j=1;
p=*L;
while(j<i&&p)
{
p=p->next;
j++;
}
if(!p||j>i) return ERROR;
s=(LinkList)malloc(sizeof(Node));
s->data=e;
s->next=p->next;
p->next=s;
}
Status ListDelete(LinkList *L,int i,ElemType *e)
{
int j=1;
LinkList p,q;
while(p->next&&j<i)
{
p=p->next;
j++;
}
if(j>i||!(p->next)) return ERROR;
q=p->next;
p=q->next;
*e=q->data;
free(q);
return OK;
}
Status GetElem(LinkList L,int i,ElemType *e)
{
LinkList p;
int j=1;
p=L->next;
while(p&&j<i)
{
p=p->next;
++j;
}
*e=p->data;
return OK;
}
Status GetMidElem(LinkList L,ElemType *e)
{
LinkList first,mid;
first=mid=L;
while(first->next!=NULL)
{
if(first->next->next!=NULL)
{
first=first->next->next;
mid=mid->next;
}
else first=first->next;
}
*e=mid->data;
return OK;
}
int main()
{
Status t;
LinkList L;
t=InitList(&L);
printf("%d ",t);
ElemType e;
CreateListHead(&L,10);
ListTraverse(L);
GetMidElem(L,&e);
printf("%d",e);
return 0;
}