#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std ;
typedef int ElemType ;
struct LinkNode{
ElemType data ;
LinkNode *next ;
};
//void Init_LinkNode(LinkNode *&L)
//{
// L = (LinkNode *)malloc(sizeof(LinkNode)) ;
// L->next = NULL ;
// return ;
//}
void CreatNode(LinkNode *&L ,ElemType *a ,int n)
{
LinkNode *p ,*last ;

L = NULL ;
for(int i = 0 ;i<n ;i++)
{
p = (LinkNode *)malloc(sizeof(LinkNode));
p->data = a[i] ;
if(L ==NULL)
L = p ;
else
last->next = p ;
last = p ;
}

last->next = NULL ;


}

LinkNode* reverse(LinkNode* L)
{
LinkNode * newHead ;
if (L == NULL || L->next == NULL) //链表为空直接返回,而H->next为空是递归基
return L;
newHead = reverse(L->next); //一直循环到链尾
L->next->next = L; //翻转链表的指向
L->next = NULL; //记得赋值NULL,防止链表错乱
return newHead; //新链表头永远指向的是原链表的链尾
}

void Display(LinkNode *L)
{
LinkNode *p = L ;

while(p)
{
cout<<p->data << " " ;
p = p->next ;
}
return ;


}

int main()
{
LinkNode *L ;
LinkNode *head ;
LinkNode s ;
ElemType a[10] = {1,2,3,9,1,5,4,6,2,7};

CreatNode(L,a,10);
Display(L) ;
L = reverse(L);
cout<<endl;
Display(L) ;
return 0 ;
}