//库函数头文件包含 |
#include<stdio.h> |
#include<malloc.h> |
#include<stdlib.h> |
//函数状态码定义 |
#define TRUE 1 |
#define FALSE 0 |
#define OK 1 |
#define ERROR 0 |
#define INFEASIBLE -1 |
#define OVERFLOW -2 |
typedef int Status; |
typedef int ElemType; //假设线性表中的元素均为整型 |
typedef struct LNode |
{ |
ElemType data; |
struct LNode *next; |
}LNode,*LinkList; |
Status ListCreate_L(LinkList &L, int n) |
{ |
LNode *rearPtr,*curPtr; //一个尾指针,一个指向新节点的指针 |
L=(LNode*) malloc ( sizeof (LNode)); |
if (!L) exit (OVERFLOW); |
L->next=NULL; //先建立一个带头结点的单链表 |
rearPtr=L; //初始时头结点为尾节点,rearPtr指向尾巴节点 |
for ( int i=1;i<=n;i++){ //每次循环都开辟一个新节点,并把新节点拼到尾节点后 |
curPtr=(LNode*) malloc ( sizeof (LNode)); //生成新结点 |
if (!curPtr) exit (OVERFLOW); |
scanf ( "%d" ,&curPtr->data); //输入元素值 |
curPtr->next=NULL; //最后一个节点的next赋空 |
rearPtr->next=curPtr; |
rearPtr=curPtr; |
} |
return OK; |
} |
void ListReverse_L(LinkList &L) |
{ |
LNode *p,*a; |
a=L->next; |
while (a->next!=NULL) |
{ |
p=a->next; |
a->next=p->next; |
p->next=L->next; |
L->next=p; |
} |
} |
void ListPrint_L(LinkList &L){ |
//输出单链表 |
LNode *p=L->next; //p指向第一个元素结点 |
while (p!=NULL) |
{ |
if (p->next!=NULL) |
printf ( "%d " ,p->data); |
else |
printf ( "%d" ,p->data); |
p=p->next; |
} |
} |
int main() |
{ |
LinkList L; |
int n; |
scanf ( "%d" ,&n); |
if (ListCreate_L(L,n)!= OK) { |
printf ( "表创建失败!!!\n" ); |
return -1; |
} |
ListReverse_L(L); |
ListPrint_L(L); |
return 0; |
} |