链表递归操作并求最大值

/***依次输出链表中的各个结点***/

#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;
}
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
题目描述 给定一个单链表的头节点 head,递归这个单链表中的最大值。 示例 输入: 1->2->3->4->5->6->7 输出: 7 输入: 2->3->4->5->6->7->1 输出: 7 输入: 3->4->5->6->7->1->2 输出: 7 数据范围: 链表长度不超过 10000,链表中的元素取值范围为 [-10000, 10000]。 思路 对于单链表递归操作,我们首先要明确的是,递归的终止条件是什么? 对于单链表来说,当我们递归到了最后一个节点,也就是 head == null 时,我们就可以停止递归操作,返回一个默认的最小值(这里是 -10000)。 然后我们需要明确的是,递归的过程中我们要做什么? 对于当前节点 head,我们需要递归出后面的节点的最大值,并将其与当前节点的值进行比较,取其中的最大值。 最后我们将得到的最大值返回即可。 代码 C++ 代码 class ListNode { public: int val; ListNode* next; ListNode(int x): val(x), next(NULL) {} }; int getMax(ListNode* head) { if (!head) { return -10000; } int nextMax = getMax(head->next); return max(head->val, nextMax); } Java 代码 class ListNode { int val; ListNode next; ListNode(int x) { val = x; } } public int getMax(ListNode head) { if (head == null) { return -10000; } int nextMax = getMax(head.next); return Math.max(head.val, nextMax); } Python 代码 class ListNode: def __init__(self, x): self.val = x self.next = None def getMax(head: ListNode) -> int: if not head: return -10000 nextMax = getMax(head.next) return max(head.val, nextMax)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值