描述

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

输入

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

输出

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

输入样例 1

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

输出样例 1

4
6

思路:

Num是我写的递归函数,因为计算节点数量的时候不想考虑头节点,所以传参数的时候直接传的是l->next,直接从首元节点开始。

首先是先找递归的出口,计算节点数量肯定要遍历整个链表,遍历到最后一个节点就必须要返回了,如果真的是一个只有一个节点的链表,那么立刻返回1(表示节点数量是1)。找出口以及返回值的思想可以借鉴分类讨论里先讨论最简单(最特殊)情况的思想,如果其他情况都符合通式,这个情况不符合通式,那这个情况就是特殊情况。

倒着往回想,如果有两个及以上的节点,那么每次只需要在该函数的返回值上依次加一就可以了,表示每次调用该函数都说明都比上次多一个节点。

代码:

#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 Num(linklist l)
{return l->next == NULL ? 1 : Num(l->next)+1;
}
int main()
{int n;while (cin >> n && n != 0){linklist l;Insert(l, n);cout<<Num(l->next)<<endl;}return 0;
}

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

  1. 2012递归求解单链表中的结点个数(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. SIP协议的传输层原理报文解析(解读rfc3581)(待排版)
  2. BT:​关键胞外酶触发了细菌群落演替偶联的高效堆肥
  3. c#中获取服务器IP,客户端IP以及其它
  4. java中的数据结构总结
  5. html5的api有什么区别,HTML入门--浅谈HTML和HTML5有什么区别?
  6. Java程序员需要掌握的计算机底层知识(三):进程、线程、纤程、中断
  7. shell脚本触发java程序支持传参补跑_01
  8. 精选 26 个 Python 实用技巧,想秀技能先 Get 这份技术列表!
  9. CSS实现标题文字过长部分显示省略号的方法
  10. 中国知名科幻网站列表
  11. linux命令日志抓取,linux抓取某条日志记录的命令
  12. 移动端测试=== 两个概念 内存泄漏 和 内存溢出 【转】
  13. 初读Geoffrey Hinton颠覆之作《Dynamic Routing Between Capsules》
  14. RANCID完全安装
  15. 译-Dart虚拟机入门(Introduction to DartVM)
  16. css中的sticky属性
  17. pybullet机器人仿真环境搭建 1.安装pybullet,测试官方示例,基础环境搭建
  18. 视觉和Lidar里程计
  19. 基于ATMEGA16单片机的空调控制器
  20. 北美跨境电商平台Wish透露未来一年在华规划

热门文章

  1. canal 历史数据如何处理_MySQL日志解析工具Canal的使用
  2. Ruby中的Mixin
  3. Unknown system variable 'tx_isolation'报错
  4. Thymeleaf模板如何获取springMVC返回的model值
  5. idea maven项目的移除添加
  6. NFS服务自动搭建及挂载脚本
  7. 跨浏览器检测某个节点是不是另一个节点的后代
  8. artDIalog 弹出层
  9. 在Vs.net中集成 NDoc生成的 Html Help 2帮助文档
  10. MySQL 我们来聊聊 count(*) 语句的优化方式有哪些?