[c++]代码库
#include<iostream>
using namespace std;
typedef int ElemType; //假设线性表中的元素均为整型
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
void ListCreate_L_Rec(LinkList &L,int n)
{
//递归边界:创建空表时只需将L赋空即可;
//递归关系:创建非空表时,将链表看做两部分:首元素组成的子表La, 第二个元素及其后元素构成的子表Lb。
//子表La容易创建(只需开辟一个节点)
//子表Lb由于规模小可以递归创建完成(类似数学归纳法的假设,只要小的都可以建设能完成)
//最后将两个子表拼接即可。
LNode *La, *Lb;
if(n==0) L=NULL;
else{
La=new LNode; //开辟子表La
cin>>La->data;
ListCreate_L_Rec(Lb,n-1 ); //递归创建子表Lb
La->next = Lb; //两个子表拼结
L=La; //第一个子表的地址赋给L。请思考为什这样处理不会使得主函数中的L取错值?
}
}
void ListPrint_L_Rec(LinkList L)
{
if(L==NULL)
return ;
else
{
cout<<" "<<L->data;
ListPrint_L_Rec(L->next);
}
}
int main()
{
LinkList L;
int n;
cin>>n;
ListCreate_L_Rec(L,n);
ListPrint_L_Rec (L);
return 0;
}