当前位置:   article > 正文

链表递归操作并求最大值_递归求单链表最大值

递归求单链表最大值
/***依次输出链表中的各个结点***/

#include<iostream>
using namespace std;

#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef int ElemType;
typedef struct LNode {
 ElemType data; //结点的数据域
 struct LNode *next; //结点的指针域
} LNode, *LinkList;//头指针

/*void CreateList_L(LinkList &L,int n){    //算法2.10 前插法创建单链表
 //逆位序输入n个元素的值,建立到头结点的单链表L
 LNode *p;
 L=new LNode;
 L->next=NULL;        //先建立一个带头结点的空链表
 cout<<"请输入 "<<n<<" 个数:\n";
 for(int i=n;i>0;--i){
  p=new LNode;       //生成新结点
  cin>>p->data;       //输入元素值
  p->next=L->next;L->next=p;    //插入到表头
 }
}*/            //CreateList_F

//后插法创建链表算法
void CreateList_L(LinkList &L, int n) {
 L = new LNode;
 L->next = NULL;
 LNode *p, *r;
 r = L;
 for (int i = 0; i < n; i++) {
  p = new LNode;
  cin >> p->data;
  p->next = NULL;
  r->next = p;
  r = p;
 }
}

//算法3.9 遍历输出链表中各个结点的递归算法
void TraverseList(LinkList p) {
 
 if (p == NULL)
  return ; //递归终止
 else {
  
  cout << p->data << endl; //输出当前结点的数据域
  TraverseList(p->next); //p指向后继指点继续递归
 }
}
int Max(LinkList p)
{
 int max;
 if(p->next==NULL)
  return p->data;
  
 else
 {
  max=Max(p->next);
  return p->data>=max?p->data:max;
 }
}
 
 

int main() {
 int n;
 LinkList L;
 //InitList(L);
 cout << "请输入元素个数:" << endl;
 cin >> n;
 cout << "请输入链表元素(以空格隔开,按回车结束):" << endl;
 CreateList_L(L, n); //后插法创建链表算法
 cout << "链表中的元素依次为:" << endl;
 TraverseList(L->next);
 cout << endl;
 cout<<"最大值为:";
 cout<<Max(L->next)<<endl;
 cout<<endl;
 return 0;
}
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号