#include<string.h>
#include<ctype.h>
#include<malloc.h> /* malloc()等 */
#include<limits.h> /* INT_MAX等 */
#include<stdio.h> /* EOF(=^Z或F6),NULL */
#include<stdlib.h> /* atoi() */
#include<io.h> /* eof() */
#include<math.h> /* floor(),ceil(),abs() */
#include<process.h> /* exit() */
/* 函数结果状态代码 */
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define INFEASIBLE -1
typedef int Status; /* Status是函数的类型,其值是函数结果状态代码,如OK等 */
typedef int Boolean;
typedef int ElemType;
/* Boolean是布尔类型,其值是TRUE或FALSE */
struct LNode
{
ElemType data;
struct LinkList *next;
}LNode;
typedef struct LNode *LinkList;
Status InitList(LinkList L)
{
L = (LinkList)malloc(sizeof(LNode));
if (!L)return ERROR;
L->next = NULL;
return OK;
}
Status ListInsert(LinkList L,int i,ElemType e)
{
int j=0;
LinkList p=L,s;
while(p&&j<i-1)
{
p=p->next;
j++;
}
if(!p||j>i-1) return ERROR;
s=(LinkList)malloc(sizeof(struct LNode));
s->data=e;
s->next=p->next;
p->next=s;
return OK;
}
Status ChangeList(LinkList L)
{
LinkList p,q;
LinkList head;
p=head->next;
head->next=NULL;
while(p!=NULL) {
q=p;
p=p->next;
q->next=head->next;
head->next=q;
}
}
void main()
{
LinkList L,p;
int num,i;
ElemType e;
InitList(L);
printf("链表中插入几个元素?");
scanf("%d",&num);
printf("这些元素分笔是:");
for(i=1;i<=num;i++)
{scanf("%d",&e);
ListInsert(L,i,e);
}
p=L;
printf("现在链表元素是");
for(i=1;i<=num;i++)
{
p=p->next;
printf("%d ",p->data);
}
printf("/n");
printf("首尾交换后链表元素是");
p=L;
ChangeList(L);
for(i=1;i<=num;i++)
{
p=p->next;
printf("%d ",p->data);
}
getch();
}