采用后置递归法遍历链表结点
来源:互联网 发布:js实现中英文切换代码 编辑:程序博客网 时间:2024/05/17 07:04
原题:链表又是一个递归的结构,若head是线性链表(a1,a2,...,an)的头指针,则head->next是线性链表(a2,a3,...an)的头指针,将原问题分解如下:
a.处理a1:显示a1;
b.处理(a2,a3,...an)
由于head->next为线性链表(a2,a3,...an)的头指针,所以可递归求解。
试编写递归遍历单链表的算法,并在递归时输出链表中所有结点的数据域的值。
#include<iostream.h>#include<stdlib.h>#include<time.h>#define ElemType chartypedef struct LNode{//链表结点结构的定义ElemType data;struct LNode *next;}LNode,*LinkList;int CreateList(LinkList &head){//生成单链表的函数LinkList p=NULL,q=NULL;head=NULL;srand((unsigned)time(NULL));for(int i=0;i<10;i++){p=new LNode;p->data=rand()%26+'a';if(head == NULL)head=p;elseq->next=p;q=p;//q永远指向尾结点}if(NULL != head){q->next=NULL;}head->data='*';return 1;}int DisplayList1(LinkList head){//顺序遍历链表并输出所有结点的数据域值if(NULL == head){cout<<"当前链表为空!"<<endl;return -1;}LinkList p=head;while(NULL != p){cout<<p->data<<" ";p=p->next;}cout<<endl<<endl;return 1;}int DisplayList2(LinkList head){//用后置递归法遍历链表并输出所有结点的数据域的值if(head){cout<<head->data<<" ";//显示表头数据域的值DisplayList2(head->next);//递归显示(a2,a3,...,an)}return 1;}int main(){LinkList head;CreateList(head);cout<<"顺序遍历链表并输出所有结点的数据域值:"<<endl;DisplayList1(head);cout<<"用后置递归法遍历链表并输出所有结点的数据域值:"<<endl;DisplayList2(head);cout<<endl<<endl;return 1;}
- 采用后置递归法遍历链表结点
- 递归的遍历TreeView中的所有结点
- 采用递归法对单向链表进行反序
- 采用递归遍历删除包含文件文件夹
- java遍历文件目录(采用递归)
- 二叉树采用三叉链表的存储结构,不借助栈的非递归中序遍历
- 二叉树采用二叉链表结构表示。设计并实现如下算法:后序递归建树,先序非递归遍历该树。
- 递归的遍历TreeView中的所有结点 方法2
- 二叉树遍历之递归、父结点、栈
- 依次输出链表中的各个结点的递归算法
- 采用非递归方式遍历目录及其子目录的文件
- 采用递归的方法遍历目录 (转载)
- 采用非递归方式遍历目录及其子目录的文件
- Java采用DOM方式递归遍历XML文件内容
- 用结构体实现链表的创建、遍历、结点插入、结点删除
- 遍历单链表一次,找出链表中间结点
- 只遍历链表一次求链表中间结点
- 131. 一个链表的结点结构,合并非递归和递归
- HDU4560 我是歌手 网络流
- 进程与线程的区别联系
- 插入字符串
- 双端队列的实现
- [Oracle]-[同义词]-public与非public同义词
- 采用后置递归法遍历链表结点
- Fatal signal 11 (SIGSEGV) at 0x390955ae (code=1)
- cocos2d-x lua 和c++的相互调用的原理
- 图解Facebook的服务器架构
- QT:用QSet储存自定义结构体的问题
- 内存泄露探测
- js 动态添加一个 节点(或控件)
- Hibernate中createQuery与createSQLQuery两者的区别 .
- poj 2987 Firing 最大权闭合图 网络流