赞
踩
分为递归创建单链表、递归从前向后输出单链表、递归求解单链表最大值、递归求解链表中所有整数的和 、递归求解链表结点个数、递归逆转链表几个部分
using namespace std; #include<iostream> typedef struct LNode{ int data; struct LNode *next;}LNode,*LinkList; void CreatList(LinkList &p){ //递归创建链表 int n; cin>>n; //输入结点数值,输入0则退出 if (n==0) p=NULL; else{ p=new LNode; p->data=n; CreatList(p->next); } } void Output(LinkList p){ //递归从前向后输出链表 if (p==NULL) return; else{ cout<<p->data<<' '; Output(p->next); } } int GetMax(LinkList p ){ //递归求解最大值 if(!p->next) return p->data; else { int max=GetMax(p->next); return p->data>=max ? p->data:max; } } int GetLength(LinkList p){ //递归求解链表的结点个数 if(!p->next) //p指向表尾,返回1 return 1; else //每递归一次,结点个数加1 { return GetLength(p->next)+1; } } int GetSum(LinkList p ) {//递归求解链表中所有整数的和 if(!p->next) //p指向表尾,返回其数值 return p->data; else return p->data+GetSum (p->next); } double GetAverage(LinkList p,int n) {//递归求解链表中所有整数的平均值 if(!p->next) //p指向表尾,返回其数值 return p->data; else { double ave=GetAverage(p->next,n-1); // 递归求解除尾结点之外的其余n-1个结点的平均值 return (ave*(n-1)+p->data)/n; //返回平均值 } } LinkList Reverse(LinkList p){ //递归逆转链表 //https://www.cnblogs.com/mld-code-life/p/12705213.html if(p->next == NULL) return p; LinkList q = p->next; LinkList head = Reverse(q); p->next = NULL; q->next = p; return head; } int main( ){ LinkList L,H; L=new LNode; L->next=NULL; CreatList(L->next);//递归创建链表 Output(L->next);//递归从前向后输出链表 int num=GetLength(L->next);//递归求解链表的结点个数 cout<<num; cout<<GetMax(L->next);//递归求解最大值 cout<<GetSum(L->next);//递归求解链表中所有整数的和 cout<<GetAverage(L->next,num);//递归求解链表中所有整数的平均值 H=Reverse(L->next);//递归逆转链表 Output(L->next);//递归从前向后输出链表 return 1; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。