#2
令狐少侠562015-09-17 16:46
|
程序代码:
#include "stdio.h"
#include "stdlib.h"
typedef int ElementType;
typedef struct Node *PtrToNode;
struct Node
{
ElementType Data;
PtrToNode Next;
};
typedef PtrToNode List;
List Read( )
{
int i,a;
int N; //链表结点个数
List p,q,head;
scanf("%d",&N);
head=NULL;
p=(struct Node*)malloc(sizeof(struct Node));
for(i=1;i<=N;i++)
{
scanf("%d",&a);
p->Data=a;
p->Next=NULL;
if(head==NULL)
head=p;
else
q->Next=p;
q=p;
}
return head;
}
void Print(List head)
{
struct Node *t;
t=head;
while(t!=NULL)
{
printf("%d",t->Data);
t=t->Next;
}
}
List Reverse(List head )
{
List s,t,p;
t=NULL;
p=head;
while(p!=NULL)//当原链表头指针不指向空时
{
s=(struct Node*)malloc(sizeof(struct Node));
/*逆转之后,原链表的头结点就是新链表的尾结点
如果不是第一个结点,则本次产生的新结点是上次结点的前一个*/
s->Data=p->Data;
s->Next=t;
t=s;
p=p->Next;
}
return s;
}
int main()
{
List L1, L2;
L1 = Read(); //返回链表头指针
L2 = Reverse(L1);
Print(L1);
Print(L2);
return 0;
}
#include "stdlib.h"
typedef int ElementType;
typedef struct Node *PtrToNode;
struct Node
{
ElementType Data;
PtrToNode Next;
};
typedef PtrToNode List;
List Read( )
{
int i,a;
int N; //链表结点个数
List p,q,head;
scanf("%d",&N);
head=NULL;
p=(struct Node*)malloc(sizeof(struct Node));
for(i=1;i<=N;i++)
{
scanf("%d",&a);
p->Data=a;
p->Next=NULL;
if(head==NULL)
head=p;
else
q->Next=p;
q=p;
}
return head;
}
void Print(List head)
{
struct Node *t;
t=head;
while(t!=NULL)
{
printf("%d",t->Data);
t=t->Next;
}
}
List Reverse(List head )
{
List s,t,p;
t=NULL;
p=head;
while(p!=NULL)//当原链表头指针不指向空时
{
s=(struct Node*)malloc(sizeof(struct Node));
/*逆转之后,原链表的头结点就是新链表的尾结点
如果不是第一个结点,则本次产生的新结点是上次结点的前一个*/
s->Data=p->Data;
s->Next=t;
t=s;
p=p->Next;
}
return s;
}
int main()
{
List L1, L2;
L1 = Read(); //返回链表头指针
L2 = Reverse(L1);
Print(L1);
Print(L2);
return 0;
}