采用后置递归法遍历链表结点

来源:互联网 发布: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;}


 

原创粉丝点击