线性表的就地逆置
题目描述
试分别以不同的存储结构实现线性表的就地逆置算发,即在原表的储存空间将线性表逆置为。
以一位数组作存储结构。
以单链表作存储结构。
输入
第一行输入线性表元素个数elenum;(0<elenum<1000)
第二行输入elenum个数字,作为线性表中的元素。
输出
分两行分别输出要求(1)和要求(2)的线性表逆置结果。
输入样例
5
2 5 3 7 15
输出样例
15 7 3 5 2
15 7 3 5 2
代码
#include <stdio.h>
#include <stdlib.h>
typedef struct tagLNode
{
int data;
struct tagLNode *next;
}LNode,*Linklist;
void Create(Linklist *L,int A[],int n) //头插法创建链表(数据逆置)
{
int i;
Linklist s;
*L=(Linklist)malloc(sizeof(LNode));
(*L)->next=NULL;
for(i=0;i<n;i++)
{
s=(Linklist)malloc(sizeof(LNode));
s->data=A[i];
s->next=(*L)->next;
(*L)->next=s;
}
}
void Output(Linklist L)
{
Linklist p=L->next;
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
int main()
{
int L[1000],elenum,i;
Linklist L1;
scanf("%d",&elenum);
for(i=0;i<elenum;i++)
scanf("%d",&L[i]);
Create(&L1,L,elenum);
for(i=elenum-1;i>=0;i--)
printf("%d ",L[i]);
printf("\n");
Output(L1);
return 0;
}