2013递归求解单链表中的结点个数(C++,附递归函数思路讲解与手绘图)
描述
利用单链表表示一个整数序列,利用递归的方法计算单链表中结点的个数。
输入
多组数据,每组数据有两行,第一行为链表的长度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++,附递归函数思路讲解与手绘图)相关推荐
- 2012递归求解单链表中的结点个数(C++,附递归函数思路讲解与手绘图)
描述 利用单链表表示一个整数序列,利用递归的方法计算单链表中结点的个数. 输入 多组数据,每组数据有两行,第一行为链表的长度n,第二行为链表的n个元素(元素之间用空格分隔).当n=0时输入结束. 输出 ...
- 2014递归求解单链表中的平均值(C++,附递归函数思路讲解)
描述 利用单链表表示一个整数序列,利用递归的方法计算单链表中各个结点的平均值. 输入 多组数据,每组数据有两行,第一行为链表的长度n,第二行为链表的n个元素(元素之间用空格分隔).当n=0时输入结束. ...
- 递归删除单链表中所有值为x的元素_如何纯递归反转链表的一部分
读完本文,你可以去力扣拿下如下题目: 92.反转链表II ----------- 反转单链表的迭代实现不是一个困难的事情,但是递归实现就有点难度了,如果再加一点难度,让你仅仅反转单链表中的一部分,你是 ...
- 【数据结构】判断一个单链表中各结点的值是否有序
count记录的是单链表的总长 count1记录的是升序的结点的个数 count2记录的是降序的结点的个数 如果count1或者count2等于count,那么就说明该序列是升序或者降序的. 稍加改进 ...
- 已知带头结点单链表中各结点的元素值为整形且递增有序,设计算法删除链表中所有大于mink且小于maxk的元素,并释放被删结点的空间。
核心函数如下: void LinkList_clear(LinkList &L,int mink,int maxk) {node *q,*t,*p,*r;p = L->next;whil ...
- c语言单链表中头结点的创立,一个关于C语言链表头结点的问题
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #include typedef struct STU{ int sno; char sname[10]; float ...
- 单链表中倒数第K个结点
单链表中倒数第K个结点 链表结点定义如下: typedef int ElemType;typedef struct Node {ElemType data; struct Node *next; }H ...
- 删除按升序排列的单链表中的所有重复元素
删除单链表中的所有重复元素 题目 解决思路 代码 说明 题目 存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中没有重复出现的数字. ...
- Java数据结构与算法———(10)单链表应用实例,找到单链表中倒数第K个节点
找到单链表中的倒数第K个节点,并打印输出节点.两段代码,思路都是相似的. 一.代码1 public class SingleLinkedListDemo {public static void mai ...
最新文章
- SIP协议的传输层原理报文解析(解读rfc3581)(待排版)
- BT:​关键胞外酶触发了细菌群落演替偶联的高效堆肥
- c#中获取服务器IP,客户端IP以及其它
- java中的数据结构总结
- html5的api有什么区别,HTML入门--浅谈HTML和HTML5有什么区别?
- Java程序员需要掌握的计算机底层知识(三):进程、线程、纤程、中断
- shell脚本触发java程序支持传参补跑_01
- 精选 26 个 Python 实用技巧,想秀技能先 Get 这份技术列表!
- CSS实现标题文字过长部分显示省略号的方法
- 中国知名科幻网站列表
- linux命令日志抓取,linux抓取某条日志记录的命令
- 移动端测试=== 两个概念 内存泄漏 和 内存溢出 【转】
- 初读Geoffrey Hinton颠覆之作《Dynamic Routing Between Capsules》
- RANCID完全安装
- 译-Dart虚拟机入门(Introduction to DartVM)
- css中的sticky属性
- pybullet机器人仿真环境搭建 1.安装pybullet,测试官方示例,基础环境搭建
- 视觉和Lidar里程计
- 基于ATMEGA16单片机的空调控制器
- 北美跨境电商平台Wish透露未来一年在华规划