描述

利用单链表表示一个整数序列,利用递归的方法计算单链表中结点的个数。

输入

多组数据,每组数据有两行,第一行为链表的长度n,第二行为链表的n个元素(元素之间用空格分隔)。当n=0时输入结束。

输出

对于每组数据分别输出一行,对应链表中的各个结点个数。

输入样例 1

4
1 2 3 4
6
1 2 43 5 7 2
0

输出样例 1

4
6

思路(Findmax函数):

首先这个函数需要返回一个值,结合题目来看就是int类型的一个数,又,递归需要一个出口,那么可以得出:在出口处需要返回一个值。这个题是要求最大的值,需要遍历链表,那么最后遍历到链表的末尾,就说明到“出口”了,此时能返回的int类型的值就只有当前节点的data。所以可以写出:

if(l->next==NULL)//l已经是最后一个节点了return l->data;

求最大值有一个经典思路是

int max=a[0];
for(int i=0;i<n;i++)
{if(a[i]>max)max=a[i];
}

所以我们也需要不断地比较。上面说到遍历到最后我们会返回当前链表的data,那么这个返回值和谁比较呢?一定就是上一个节点的data,它俩一比,再返回这两个之中那个最大的,这其实也是递归思路的逆向思考过程了,先考虑返回值是什么,再考虑返回值要用来干什么(需要什么来做到这个目标)。

图片:

代码:

#include<iostream>
using namespace std;
typedef struct LNode
{int data;struct LNode* next;
}*linklist, LNode;
void Insert(linklist& l, int n)
{l = new LNode;l->next = NULL;linklist rear = l;for (int i = 0; i < n; i++){linklist p = new LNode;cin >> p->data;p->next = NULL;rear->next = p;rear = p;}}
int Findmax(linklist l)
{if (l->next == NULL)return l->data;else if (l->next->data > Findmax(l->next))return l->next->data;elsereturn Findmax(l->next);
}
int main()
{int n;while (cin >> n && n != 0){linklist l;Insert(l, n);cout<<Findmax(l->next)<<endl;}return 0;
}

2012递归求解单链表中的结点个数(C++,附递归函数思路讲解与手绘图)相关推荐

  1. 2013递归求解单链表中的结点个数(C++,附递归函数思路讲解与手绘图)

    描述 利用单链表表示一个整数序列,利用递归的方法计算单链表中结点的个数. 输入 多组数据,每组数据有两行,第一行为链表的长度n,第二行为链表的n个元素(元素之间用空格分隔).当n=0时输入结束. 输出 ...

  2. 2014递归求解单链表中的平均值(C++,附递归函数思路讲解)

    描述 利用单链表表示一个整数序列,利用递归的方法计算单链表中各个结点的平均值. 输入 多组数据,每组数据有两行,第一行为链表的长度n,第二行为链表的n个元素(元素之间用空格分隔).当n=0时输入结束. ...

  3. 递归删除单链表中所有值为x的元素_如何纯递归反转链表的一部分

    读完本文,你可以去力扣拿下如下题目: 92.反转链表II ----------- 反转单链表的迭代实现不是一个困难的事情,但是递归实现就有点难度了,如果再加一点难度,让你仅仅反转单链表中的一部分,你是 ...

  4. 【数据结构】判断一个单链表中各结点的值是否有序

    count记录的是单链表的总长 count1记录的是升序的结点的个数 count2记录的是降序的结点的个数 如果count1或者count2等于count,那么就说明该序列是升序或者降序的. 稍加改进 ...

  5. 已知带头结点单链表中各结点的元素值为整形且递增有序,设计算法删除链表中所有大于mink且小于maxk的元素,并释放被删结点的空间。

    核心函数如下: void LinkList_clear(LinkList &L,int mink,int maxk) {node *q,*t,*p,*r;p = L->next;whil ...

  6. c语言单链表中头结点的创立,一个关于C语言链表头结点的问题

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #include typedef struct STU{ int sno; char sname[10]; float ...

  7. 单链表中倒数第K个结点

    单链表中倒数第K个结点 链表结点定义如下: typedef int ElemType;typedef struct Node {ElemType data; struct Node *next; }H ...

  8. 删除按升序排列的单链表中的所有重复元素

    删除单链表中的所有重复元素 题目 解决思路 代码 说明 题目 存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中没有重复出现的数字. ...

  9. Java数据结构与算法———(10)单链表应用实例,找到单链表中倒数第K个节点

    找到单链表中的倒数第K个节点,并打印输出节点.两段代码,思路都是相似的. 一.代码1 public class SingleLinkedListDemo {public static void mai ...

最新文章

  1. 编译原理视角下的 c c 语言左值教学,西安交通大学18年3月课程考试《编译原理》作业考核试题...
  2. 我国人工智能专利申请量去年超3万件,广东领先
  3. 根据时间戳 统计每天用户的金额总数
  4. java get与post区别_HTTP请求(GET与POST区别)和响应
  5. 几款极好的 JavaScript 下拉列表插件
  6. Git如何配置多个SSH-Key呢?
  7. Helm 3 完整教程(一):Helm 3 简介
  8. XcodeGhost简单查看
  9. 如何防止数据库中的信息被“脱库”-笔记
  10. python random设置种子_关于python:如何查询random.random()使用的种子?
  11. 51单片机学习笔记2 -- 单灯控制及流水灯
  12. 学C语言的大佬们帮帮小弟吧小弟感激不尽
  13. android obtain,Android Message.obtain() 之 高效原因分析
  14. 第三方支付4(前端实现支付)
  15. SurfacePro6解决亮度自动调节问题
  16. 深圳学位分数计算机,深圳各区学位录取积分出炉!罗湖录取到C类,南山最高降40分……...
  17. 【Python学习】数据归一化Scaling与标准化Normalization间的区别与相关实现
  18. 安装Ubuntu13.10后的首要事情
  19. 前端设计人员必会技能 - gif动画图片制作
  20. meso-四(4-吡啶)卟啉TPyrP/四(1-吡啶-羟乙基)卟啉T(4-HEPy)P;紫红色晶体状ZnTPP-Py/5-(4-炔丙氧基苯基)-10,15,20-三苯基锌卟啉

热门文章

  1. linux+jmeter+python基础+抓包拦截
  2. javaWeb项目带红色感叹号问题原因
  3. MongoDB 核心将支持全文搜索功能 (2.3.2)
  4. linux内核工程师必须知道的三十道题
  5. [C#]自定义鼠标样式
  6. deleted 表和 inserted 表
  7. 用Dreamweaver+ASP实现分页技术的参考
  8. 华为收购港湾核心业务 6年恩怨尘埃落定
  9. Android倒计时案例展示
  10. 0054-软件版本号问题