#include <stdio.h>
#include <stdlib.h>
typedef int ElementType;
typedef struct Node *PtrToNode;
struct Node {
ElementType Data;
PtrToNode Next;
};
typedef PtrToNode List;
List createList(){
List head = NULL;
return head;
}
void insertAtHead(List* pL,int a){
List tmp = (List)malloc(sizeof(Node));
tmp->Data=a;
tmp->Next=NULL;
if(*pL==NULL){
*pL=tmp;
}
else{
tmp->Next=*pL;
*pL=tmp;
}
}
List Read(){
List head = createList();
insertAtHead(&head,1);
insertAtHead(&head,2);
insertAtHead(&head,3);
return head;
}
void Print( List L ){
List tmp=L;
while(tmp!=NULL){
printf("%d",tmp->Data);
tmp=tmp->Next;
}
};
List Reverse( List L ){
if(L==NULL)
return NULL;
if(L->Next==NULL)
return L;
if(L->Next->Next==NULL){
List lef=L;
List rig=L->Next;
lef->Next=NULL;
rig->Next=lef;
return rig;
}
else{
List mid=L->Next;
List lef=L;
List rig=mid->Next;
lef->Next=NULL;
mid->Next=lef;
while(rig!=NULL){
lef=mid;
mid=rig;
rig=rig->Next;
mid->Next=lef;
}
return mid;
}
}
int main()
{
List L1, L2;
L1 = Read();
L2 = Reverse(L1);
Print(L1);
Print(L2);
return 0;
}